Аз съм нов в 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();
След това се опитвам да добавя магазините, продуктите и служителите към базата данни според примера за започване. Изключението, което получавам, се случва на Commit и е:
обект препраща към незаписан преходен екземпляр - запазете преходния екземпляр преди промиване. Тип: FluentNHibernateTesting.Entities.Employee, Обект: FluentNHibernateTesting.Entities.Employee
Q2) Как да разреша този проблем? Разбирам (от моето ограничено четене), че това има нещо общо с правилното настройване на каскадните елементи на обектните взаимоотношения, но съм малко объркан за това как да направя това ефективно с помощта на автоматично картографиране.
Q3) Има ли целева дата за пускане на проекта Fluent? Аз (както предполагам и много други) смятам, че това е отлична инициатива, но имам предвид да я използвам, освен ако не е в стабилно състояние.
Q4) В много от блоговете се споменава, че работят стабилно за паритет на функциите във Fluent с hbn.xml. Има ли някъде списък с тези липсващи функции, за да помогне при оценката и използването на този инструмент?
Оценявайте помощта предварително.