Обновлены библиотеки DLL NHibernate и FNH - теперь получаются исключения «No persister» - PullRequest
0 голосов
/ 08 ноября 2011

Я пытаюсь обновить свой проект 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, сохраняются должным образом.

В старых версиях с этим не было проблем - возможно, в новых версиях есть ошибка, когда существует более одного уровня наследования?

Ответы [ 2 ]

1 голос
/ 08 ноября 2011

Статья Может быть полезно обновить ваши приложения до NHibernate 3.2 с помощью Fluent NHibernate 1.2 .Я сам использовал его для обновления проекта, и он работал.

1 голос
/ 08 ноября 2011

Я перенес наш проект с более старого (F) NH на последний NH 3.2. Я подозреваю, что теперь он использует разные ключевые имена полей в коллекциях и тому подобное, потому что мне нужно указывать точные имена столбцов при использовании существующей базы данных.

Кроме того, я предлагаю восстановить Fluent NHibernate из источников с помощью NHibernate 3.2, чтобы быть уверенным, что все встало на свои места.

...