Я пытаюсь обновить свой проект FNH Automapping до последних версий NHibernate и Fluent NHibernate (NH 3.2 и FNH 1.3), но теперь я получаю исключение «no persister» для производного класса (хотя базовый класс по-прежнемупохоже, сохраняется правильно).
Этот производный класс автоматически сопоставлен со старыми dll (FNH 1.0, NH 2.1.2) - я никоим образом не изменил свою логику отображения или эти классы.
Я обновил свой проект, просто скопировав новые библиотеки поверх старых, и удалив ссылки на библиотеки, которые больше не нужны (например, Antlr 3, Castle), новыми библиотеками.
ТочныйИспользуемые версии:
NHibernate 3.2.0.4000
FluentNHibernate 1.3.0.0
System.Data.SQLite 1.0.76.0
VS 2008 9.0.30729.1 SP
Windows XP SP3 (32 бита)
Код отображения, который работает со старыми dll, но не с новыми:
return AutoMap.Assemblies(_assemblies)
// Don't map the abstract base class
.IgnoreBase<OfeEntity>()
// Only map subclasses of OfeEntity
.Where(t => t.IsSubclassOf(typeof(OfeEntity)))
.Conventions.Add(
// Do cascading saves on all entities so lists will be
// automatically saved
DefaultCascade.All(),
// Turn on lazy loading, so will only read data that is actually
// displayed
DefaultLazy.Always()
);
Редактировать:
ПослеВключив FNH Diagnostics, я вижу, что FNH не создает таблицу для моего производного класса с новыми dll.
Кроме того, я заметил одну вещь - класс, который не сохраняется, разделен на 2 уровня.То есть у меня есть следующие классы:
public abstract class OfeEntity
public class OfeMeasurementBase : OfeEntity
public class OfeDlsMeasurement : OfeMeasurementBase
OfeDlsMeasurement - это класс, который не сохраняется.OfeMeasurementBase, а также несколько других классов, которые наследуются от OfeEntity, сохраняются должным образом.
В старых версиях с этим не было проблем - возможно, в новых версиях есть ошибка, когда существует более одного уровня наследования?