Я пытался перейти с NHibernate 2.3 на 3.2 , включая переход с Fluent NHibernate 1.0 на 1.3 .
После выполнения обновления соглашения Fluent, обнаруженные при поиске сборок, по-видимому, не применяются; Я получаю множество ошибок с жалобами на невозможность найти определенные свойства или столбцы.
Изменить:
Моя схема отображения выглядит следующим образом:
.Mappings(
m => m.FluentMappings
.AddFromAssemblyOf<NHibernateMapping>()
.Conventions.AddFromAssemblyOf<NHibernateMapping>())
Мне удалось заставить свободный интерфейс загружать все соглашения с точкой останова на их конструкторах, чтобы отслеживать, когда они инициализируются. Однако ни одно из соглашений на самом деле не вызывается: ни одна из точек останова в их Apply
методах не используется.
Ошибка проявляется через NHibernate следующим образом:
NHibernate.MappingException: не удалось найти установщик для свойства 'All' в классе 'Headline'
Свойство All
не имеет установщика - одно из соглашений должно изменить отображение для ссылки на установщик для другого свойства.
При проверке экспортируемых файлов HBM я вижу, что ни одно из соглашений не было применено и используются соглашения по умолчанию для Fluent.
Почему мои условные обозначения не применяются к отображению?
Edit:
Методом проб и ошибок я обнаружил, что проблема заключается в вызове AddFromAssemblyOf<T>()
. Система сопоставления находит и инициализирует каждый из типов IConvention
, но затем не добавляет их к посетителю и не применяет их к сопоставлению.
Обходной путь - добавить каждое соглашение вручную с помощью вызова Add<TConvention>()
. Это работает для нас, потому что у нас есть несколько соглашений. Не нужно много усилий, чтобы написать метод расширения для замены AddFromAssemblyOf<T>()
, если кому-то понадобится более надежное решение проблемы.
Все еще не уверены, почему это не работает, но теперь это похоже на ошибку.