Я новичок в NHibernate, его конфигурация всегда казалась мне слишком обременительной. Вчера я столкнулся с функциями автоматического картирования в Fluent NHibernate и был приятно впечатлен.
Для самообразования я поставил перед собой задачу попробовать первый проект «Приступая к работе» (http://wiki.fluentnhibernate.org/show/GettingStartedFirstProject) с использованием AutoMappings и Условных обозначений. Я должен признать, что мне не повезло.
Чтобы подвести итог моих шагов:
В этом примере я внес некоторые незначительные изменения в схему базы данных, главным образом для удаления подчеркиваний из внешних ключей (т. Е. Product_id к ProductId), поскольку это сделает его более совместимым с нашими стандартами именования баз данных.
В1) Я пытался написать реализацию IHasManyConvention, используя в качестве примера ForeignKeyConvention, но метод WithKeyColumn, похоже, не существует (я предполагаю, что это потому, что я скачал сборку вчерашнего дня, поэтому впоследствии дизайн изменился с момента написания статьи). Как мне исправить это?
Я также внес некоторые незначительные изменения в слой Entities в этом примере, так как думал, что это облегчит задачу: они должны были переименовать StoresStockedIn в Stores (Product.cs) и Staff to 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, Объект: FluentNHibernateTesting.Entities.Employee
Q2) Как мне решить эту проблему? Я понимаю (из моего ограниченного прочтения), что это как-то связано с правильной настройкой каскадных элементов объектных отношений, но я немного озадачен тем, как сделать это эффективно с помощью Auto Mapping.
Q3) Есть ли целевая дата релиза для проекта Fluent? Я (как я полагаю, многие другие) чувствую, что это отличная инициатива, но я с осторожностью использую ее, если она не находится в стабильном состоянии.
Q4) Во многих блогах упоминается, что они постоянно работают над тем, чтобы функциональность Fluent соотносилась с hbn.xml. Есть ли где-нибудь список этих отсутствующих функций, чтобы помочь с оценкой и использованием этого инструмента?
Заранее признателен за помощь.