Не сохраняется для: Castle.Proxies. <EntityName>Proxy и lazy = "true" в NHibernate? - PullRequest
7 голосов
/ 22 июня 2011

Я пытаюсь использовать ленивую загрузку для свойства одного из моих лиц

Отображение свойств выглядит примерно так:

<property name="Foobar" type="AnsiString" column="FOOBAR" lazy="true"/>

Однако, когда я пытаюсь сохранить экземпляр этого объекта (используя Linq), он вызывает исключение DatabaseQueryException со следующим внутренним исключением:

NHibernate.MappingException: не сохраняется для: Castle.Proxies.FooEntityProxy "

И когда я удаляю элемент lazy = "true", исключение больше не генерируется. В чем проблема с использованием lazy = "true" и как это исправить?

Ответы [ 3 ]

4 голосов
/ 06 октября 2011

Я знаю, что это поздний ответ, но у меня была такая же проблема ранее.Я использовал пользовательский перехватчик для создания прокси, и поэтому обнаружил, что проблема в том, что я не переопределил метод «GetEntityName».Анализ прокси в методе GetEntityName и возвращение правильного имени класса сделали свое дело.

В моем случае у меня был простой метод расширения для прокси-прокси моих объектов, называемый "UnProxy", поэтому вся моя реализация этого метода выглядела так:

public override string GetEntityName(object entity)
{
    if (entity == null)
        return base.GetEntityName(entity);
    return entity.UnProxy().GetType().FullName;
}
3 голосов
/ 24 июня 2011

Вы уверены, что используете NHibernate 3?Я думаю, что только эта версия поддерживает ленивую загрузку скалярных свойств!

update

Не уверен, что это может помочь вам, но попробуйте посмотреть здесь:

Свойство отложенной загрузки NHibernate - что означает инструментарий байт-кода времени сборки?

или здесь:

Поведение отложенных свойств NHibernate?

2 голосов
/ 24 июня 2011

Если вы пометите свойство как ленивое, оно должно быть виртуальным автоматическим свойством (без тела, например public virtual MyType Baz { get; set; }). Если вы попытаетесь получить доступ к значению основного поля, вместо того чтобы проходить через свойство, вы обойдете ленивую загрузку свойства и можете получить неожиданные результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...