Я хочу сделать именно то, что задает этот вопрос:
Каскадное сохранение с беглым автоматическим отображением NHibernate
Использование Fluent Nhibernate Mappings для включения «каскада» глобально один раз для всех классов и типов отношений, используя один вызов, вместо того, чтобы устанавливать его для каждого отображения индивидуально.
Ответ на предыдущий вопрос выглядит великолепно, но я боюсь, что Fluent Nhibernate API изменил свой синтаксис .WithConvention в прошлом году и сломал ответ ... либо это, либо я что-то упускаю
Я продолжаю получать кучу имен не найденных ошибок, связанных с IOneToOnePart, IManyToOnePart и всеми их вариациями:
"Не удалось найти тип или имя пространства имен 'IOneToOnePart' (отсутствует директива using или ссылка на сборку?)"
Я попробовал официальный пример библиотеки DLL, библиотеки RTM и последнюю сборку, и ни одна из них, похоже, не позволяет 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();
}
}
}