Я новичок в NHibernate, его конфигурационный аспект всегда казался мне слишком обременительным. Вчера я познакомился с функциями автоматического сопоставления в Fluent NHibernate и был впечатлен.
Чтобы получить образование, я поставил перед собой задачу попробовать «Первый проект для начала» (http://wiki.fluentnhibernate.org/show/GettingStartedFirstProject) с использованием AutoMappings и соглашений. Я должен признать, что мне не очень повезло.
Подводя итог моим шагам:
Я внес некоторые незначительные изменения в схему базы данных в этом примере, главным образом для удаления подчеркивания из внешних ключей (например, от Product_id до ProductId), так как это приведет его в соответствие с нашими стандартами именования баз данных.
Q1) Я попытался написать реализацию IHasManyConvention, используя ForeignKeyConvention в качестве примера, но метод WithKeyColumn, похоже, не существует (я предполагаю, что это связано с тем, что я загрузил вчерашнюю сборку, поэтому впоследствии дизайн изменился с момента написания статьи). Как мне это исправить?
Я также внес некоторые незначительные изменения в слой Entities в этом примере, поскольку я думал, что это упростит задачу, они должны были переименовать StoresStockedIn в Stores (Product.cs) и Staff в Employees (Store.cs).
Мой код выглядит так:
var cfg = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2005
.ConnectionString(c => c
.Is(connectionString)))
.Mappings(m => m.AutoMappings.Add(
AutoPersistenceModel.MapEntitiesFromAssemblyOf<Store>()
.Where(t => t
.Namespace == "FluentNHibernateTesting.Entities")
.ConventionDiscovery.Setup(c => c.Add<ForeignKeyConvention>())
))
.BuildSessionFactory();
Затем я пытаюсь добавить магазины, продукты и сотрудников в базу данных в соответствии с примером начала работы. Исключение, которое я получаю, происходит при фиксации:
объект ссылается на несохраненный временный экземпляр - сохраните временный экземпляр перед сбросом. Тип: FluentNHibernateTesting.Entities.Employee, Entity: FluentNHibernateTesting.Entities.Employee
Q2) Как мне решить эту проблему? Я понимаю (из моего ограниченного чтения), что это как-то связано с правильной настройкой каскадных элементов объектных отношений, но я немного озадачен, как это сделать эффективно с помощью Auto Mapping.
Q3) Есть ли целевая дата выпуска проекта Fluent? Я (как и многие другие) считаю, что это отличная инициатива, но я не забываю использовать ее, если она не находится в стабильном состоянии.
Q4) Во многих блогах упоминается, что они неуклонно работают над достижением паритета функций Fluent и hbn.xml. Есть ли где-нибудь список этих недостающих функций, чтобы помочь с оценкой и использованием этого инструмента?
Заранее оцените помощь.