Каскадное сохранение с беглым автоматическим отображением NHibernate - старый ответ все еще действителен?
Я хочу сделать именно то, что задает этот вопрос:Спасение каскада с беглым автоматическим отображением NHibernate
Использование Fluent Nhibernate Mappings для включения «каскада» глобально один раз для всех классов и типов отношений, используя один вызов, а не устанавливая его для каждого отображения индивидуально.
Ответ на предыдущий вопрос выглядит великолепно, но я боюсь, что API Fluent Nhibernate изменил свой синтаксис .WithConvention в прошлом году и сломал ответ ... либо это, либо я что-то упустил.
Я продолжаю получать кучу имен не найденных ошибок, связанных с IOneToOnePart, IManyToOnePart и всеми их вариациями:
«Не удалось найти тип или имя пространства имен« IOneToOnePart »(отсутствует директива using или ссылка на сборку?)»
Я пробовал официальный пример DLL, RTM DLL и последнюю сборку, и ни один из них, похоже, не дает VS 2008 увидеть требуемое пространство имен.
Вторая проблема заключается в том, что я хочу использовать класс с моей AutoPersistenceModel, но я не уверен, где находится эта строка: .ConventionDiscovery.AddFromAssemblyOf () в моем методе создания фабрики.
private static ISessionFactory CreateSessionFactory()
{
return Fluently.Configure()
.Database(SQLiteConfiguration.Standard.UsingFile(DbFile))
.Mappings(m => m.AutoMappings
.Add(AutoMap.AssemblyOf<Shelf>(type => type.Namespace.EndsWith("Entities"))
.Override<Shelf>(map =>
{
map.HasManyToMany(x => x.Products).Cascade.All();
})
)
)//emd mappings
.ExposeConfiguration(BuildSchema)
.BuildSessionFactory();//finalizes the whole thing to send back.
}
Ниже класс и с помощью утверждений я пытаюсь
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using FluentNHibernate.Conventions;
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using NHibernate;
using NHibernate.Cfg;
using NHibernate.Tool.hbm2ddl;
using FluentNHibernate.Mapping;
namespace TestCode
{
public class CascadeAll : IHasOneConvention, IHasManyConvention, IReferenceConvention
{
public bool Accept(IOneToOnePart target)
{
return true;
}
public void Apply(IOneToOnePart target)
{
target.Cascade.All();
}
public bool Accept(IOneToManyPart target)
{
return true;
}
public void Apply(IOneToManyPart target)
{
target.Cascade.All();
}
public bool Accept(IManyToOnePart target)
{
return true;
}
public void Apply(IManyToOnePart target)
{
target.Cascade.All();
}
}
}