Как я могу использовать Fluent NHibernate Automapping с несколькими списками одного типа в сущности?
Похоже, что NHibernate не может автоматизировать более одного IList данного типа в сущности.
Рассмотрим следующие две сущности (на основе примера кода examples.FirstProject, включенного в исходный код Fluent NHibernate).
public class Employee
{
public virtual int Id { get; private set; }
public virtual string FirstName { get; set; }
public virtual string LastName { get; set; }
}
public class Store
{
public virtual int Id { get; private set; }
public virtual IList<Employee> Staff { get; set; }
public virtual IList<Employee> Managers { get; set; }
}
Кажется, это совершенно правильная объектная модель - в каждом магазине работают несколько сотрудников и несколько сотрудников-менеджеров.
Но когда я выполняю автоматическую проверку, списки сотрудников и менеджеров сохраняются в таблице Employee с одинаковым внешним ключом.
Employee Table
Id FirstName LastName Store_id
3 Daisy Harrison 1
4 Jack Torrance 1
5 Sue Walkters 1
6 Tom Tommorow 1
7 Dick Diggler 1
В результате получается, что когда данные считываются из базы данных, списки сотрудников и менеджеров заполняютсякаждый строка в таблице.
Для меня это похоже на ошибку в Automapping, но я довольно новичок в NHibernate в любой форме и пока не до конца знаю, что это за ограничения.
В любом слючае,как я могу заставить NHibernate рассматривать два списка как разные?
Если возможно, я был бы признателен за фрагмент кода Automapping, который непосредственно обращается к предоставленному образцу кода (например, что-то вроде «поместите это точное переопределение в раздел .Mappings вашей CreateSessionFactory»).
Это потому, что я только немного знаком с Automapping, и совсем не знаком со старыми способами ведения дел, а это значит, что я пока не могу «хорошо заполнить пробелы».
Но если бы у вас было только время, чтобы указать мне правильное направление, это тоже было бы полезно.
Вот мой код CreateSessionFactory, чтобы дать некоторый контекст:
private static ISessionFactory CreateSessionFactory()
{
ISessionFactory sessionFactory = null;
const string autoMapExportDir = "AutoMapExport";
if( !Directory.Exists(autoMapExportDir) )
Directory.CreateDirectory(autoMapExportDir);
try
{
var autoPersistenceModel =
AutoMap.AssemblyOf<Product>()
.Where(t => t.Namespace == "Examples.FirstProject.Entities")
.Conventions.Add( DefaultCascade.All() )
;
sessionFactory = Fluently.Configure()
.Database(SQLiteConfiguration.Standard
.UsingFile(DbFile)
.ShowSql()
)
.Mappings(m => m.AutoMappings.Add(autoPersistenceModel)
.ExportTo(autoMapExportDi,r)
)
.ExposeConfiguration(BuildSchema)
.BuildSessionFactory()
;
}
catch (Exception e)
{
Console.WriteLine(e);
}
return sessionFactory;
}