Свободное владение NHibernate.Автоматическое картографирование и соглашения

StackOverflow https://stackoverflow.com/questions/1242613

Вопрос

Я новичок в NHibernate, его настройка всегда казалась мне слишком обременительной.Вчера я столкнулся с функциями автоматического сопоставления Fluent NHibernate и был очень впечатлен.

Чтобы получить образование, я поставил перед собой задачу реализовать проект «Начало работы с первого раза» (http://wiki.fluentnhibernate.org/show/GettingStartedFirstProject) с использованием автоматических сопоставлений и соглашений.Я должен признать, что мне не очень повезло.

Подводя итог моим шагам:

В этом примере я внес некоторые незначительные изменения в схему базы данных, в основном для того, чтобы удалить подчеркивания из внешних ключей (т.Product_id в ProductId), так как это сделает его более совместимым с нашими стандартами именования баз данных.

Вопрос 1) Я пытался написать реализацию IHasManyConvention, используя в качестве примера ForeignKeyConvention, но метод WithKeyColumn, похоже, не существует (я предполагаю, что это связано с тем, что я загрузил вчерашнюю сборку, поэтому с момента написания статьи дизайн изменился).Как мне это исправить?

Я также внес некоторые незначительные изменения в слой Entities в этом примере, так как думал, что это облегчит задачу: они должны были переименовать StoresStockedIn в Stores (Product.cs), а Staff в Сотрудники (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.Сотрудник, Сущность:FluentNHibernateTesting.Entities.Employee

В2) Как мне решить эту проблему?Я понимаю (из моего ограниченного чтения), что это как-то связано с правильной настройкой каскадных элементов объектных отношений, но я немного озадачен тем, как эффективно это сделать с помощью автоматического сопоставления.

В3) Есть ли запланированная дата выпуска проекта Fluent?Я (как и многие другие) считаю, что это отличная инициатива, но готов использовать ее, если она не находится в стабильном состоянии.

Вопрос 4) Во многих блогах упоминается, что они постоянно работают над равенством функций Fluent с hbn.xml.Есть ли где-нибудь список этих недостающих функций, чтобы помочь в оценке и использовании этого инструмента?

Благодарим за помощь заранее.

Это было полезно?

Решение

Я задал Джеймсу Грегори те же вопросы в электронном письме напрямую ему.Он дал этот превосходный ответ.

'Привет, Пол!

1) KeyColumnNames — это то, что вам нужно.

2) Вы можете сделать это одним из трех способов.Настройте IHasManyConvention для глобального каскадирования всех связей, используйте вызов ForTypesThatDeriveFrom или переопределение автоматического сопоставления.

3) Сейчас мы проводим закрытое тестирование нашей версии 1.0.Неизвестно, будет ли у нас публичная бета-версия или сразу же релиз, но это должно произойти в ближайшие несколько недель.

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

Чтобы предотвратить любые комментарии о том, что наша документация устарела, документация будет переработана для версии 1.0 ;)

Джеймс'

Спасибо, Джеймс.

Другие советы

Есть ли целевая дата выпуска для Свободный проект?Я (как я предполагаю, многие другие) чувствуют, что это отличный инициативу, но я не забываю о том, чтобы использовать ее если только он не находится в стабильном состоянии.

Теперь вы сможете получить рабочую версию Fluent nHibernate из их репозитория SVN.Они также скомпилировали двоичные файлы.

В настоящее время нет официальных выпусков Fluent NHibernate.Это отражает не качество, а нашу быструю скорость перемен.Наша кодовая база обновляется ежедневно, поэтому выпуск официальных релизов становится бессмысленным, пока мы не достигнем равенства функций с NHibernate Core.Большинство обычных функций, которые вы используете изо дня в день, уже готовы.

http://fluentnhibernate.org/downloads

Актуальные проблемы здесь:

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

Никто из них, похоже, не мешает сделкам.Я думаю, это зависит от того, сколько времени у вас есть на эксперименты.

Объект ссылается на несохраненный переходный процесс instance - сохранить временный экземпляр перед промывкой.Тип:FluentNHibernateTesting.Entities.Employee, Сущность:FluentNHibernateTesting.Entities.Employee

Если вы Google объект ссылается на несохраненный временный экземпляр, вы найдете несколько совпадений для этого.Лучше всего начать проходить через них и устранять неполадки.Как ни странно, из того, что я прочитал, похоже, что сообщение об ошибке означает именно то, что оно говорит, или существует связь «многие-многие» или каскадные отношения, которые не обновляются.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top