NHibernate: неинициализированный прокси передается для сохранения () и каскада - PullRequest
6 голосов
/ 15 октября 2008

Я получаю исключение NHibernate.PersistentObjectException при вызове session.Save (), которое происходит из-за неинициализированного прокси, переданного в save (). Если я возлюсь с настройками каскада, я могу заставить его уйти, но тогда дочерние объекты не сохраняются.

Единственное другое исправление, которое я нашел, это добавление следующего в мой DefaultSaveEventListener.

    protected override bool ReassociateIfUninitializedProxy(object obj, global::NHibernate.Engine.ISessionImplementor source)
    {
        if (!NHibernateUtil.IsInitialized(obj))
            NHibernateUtil.Initialize(obj);

        return base.ReassociateIfUninitializedProxy(obj, source);
    } 

Это явно не идеальное решение.

Есть идеи?

Ответы [ 3 ]

4 голосов
/ 22 июля 2010

Там достаточно наличия пользовательского подкласса DefaultSaveEventListener, не содержащего переопределенного или расширенного поведения, чтобы вызвать это исключение для меня, используя следующую конфигурацию Xml:

<event type="save-update">
    <listener class="MyNamespace.MyCustomSaveEventListener, MyAssembly" />
</event>

Я продолжаю это обсуждение в этом вопросе .

Обновление:

Я по ошибке получил от DefaultSaveEventListener вместо DefaultSaveOrUpdateEventListener, изменение суперкласса сделало эту проблему ушедшей для меня.

2 голосов
/ 30 мая 2010

У меня была похожая проблема.

Исправление было простым: use ISession.Get(), а не ISession.Load()

2 голосов
/ 14 июля 2009

Вы пытаетесь работать с дочерним объектом, который находится в списке корневого агрегатного объекта? Если это так, вам нужно работать с корнем, перейти к дочернему элементу, внести изменения и сохранить root , а не дочерний элемент.

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