Свободно NHibernate. Автоматично картографиране и конвенции

Аз съм нов в 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. Има ли някъде списък с тези липсващи функции, за да помогне при оценката и използването на този инструмент?

Оценявайте помощта предварително.


person Community    schedule 07.08.2009    source източник


Отговори (3)


Зададох на Джеймс Грегъри същите въпроси в имейл директно до него. Той предостави този отличен отговор.

„Хей Пол,

1) KeyColumnNames е това, което търсите.

2) Можете да направите това по един от 3 начина. Настройте IHasManyConvention, за да направите глобално всички релации каскадни, използвайте извикване ForTypesThatDeriveFrom или замяна на автоматично съпоставяне.

3) Сега сме в частно тестване на нашата версия 1.0. Не сме сигурни дали ще имаме публична бета версия или направо за пускане, но това трябва да се случи през следващите няколко седмици.

4) Малко вероятно е някога да имаме пълна функционалност с NHibernate, нямаме никакво желание да бъдем. Много от характеристиките на NH са изключително езотерични и няма голяма полза за нас да ги прилагаме. От 1.0 ще има много малко функции, които не поддържаме и които хората използват редовно. Мога уверено да кажа, че всички обичайни сценарии за картографиране са обслужвани и ако има нещо, което не е, винаги можете да се върнете към hbm за този случай.

За да предотвратим всякакви коментари, че нашите документи са остарели, документацията ще бъде преработена основно за 1.0 ;)

Джеймс

Благодаря Джеймс.

person Community    schedule 09.08.2009

Има ли целева дата за пускане на проекта Fluent? Аз (както предполагам и много други) смятам, че това е отлична инициатива, но имам предвид да я използвам, освен ако не е в стабилно състояние.

Трябва да можете да получите работеща версия на Fluent nHibernate от тяхното SVN хранилище сега. Те също имат компилирани двоични файлове.

Понастоящем няма официални издания на Fluent NHibernate. Това не е отражение на качеството, а на нашата бърза скорост на промяна. Нашата кодова база се актуализира ежедневно, което прави пускането на официални издания безсмислено начинание, докато не постигнем паритет на функциите с NHibernate Core. Повечето от обичайните функции, които използвате всеки ден, са готови.

http://fluentnhibernate.org/downloads

Текущите проблеми са тук:

http://code.google.com/p/fluent-nhibernate/issues/list

Никой от тях не изглежда да е убиец на сделки. Предполагам, че зависи от това колко време имаш за експериментиране.

person Robert Harvey    schedule 07.08.2009

обект препраща към незаписан преходен екземпляр - запазете преходния екземпляр преди промиване. Тип: FluentNHibernateTesting.Entities.Employee, Обект: FluentNHibernateTesting.Entities.Employee

Ако обектът на Google препраща към незаписан преходен екземпляр, ще намерите няколко съвпадения за това. Най-добре е да започнете да ги разглеждате и да отстранявате неизправности. Анекдотично, от това, което прочетох, изглежда, че съобщението за грешка означава точно това, което казва, или има много-много или каскадна връзка, която не се актуализира.

person Robert Harvey    schedule 07.08.2009