NHibernate: “набор не был обработан сбросом ()” вызванный ленивой проблемой загрузки

У меня есть два класса:

class Parent
{
    public virtual Child Child { get; set; }
}

class Child 
{
    public virtual IList<GrandChild> GrandChildren { get; set; }
}

У меня есть экземпляр Parent загруженный из моего ISession, Parent.Child ленив загруженный (НЕ загруженный в этой точке). Ребенок. GrandChildren также ленив загруженный.

Если я делаю это:

session.Save(new Parent { Child = existingParent.Child } );

Я добираюсь collection [Child.GrandChildren] was not processed by flush()

Если я вызываю existingParent Child свойство, которое будет загружено, просто путем доступа к нему:

var x = existingParent.Child.Name

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

** Редактирование: ** Родитель имеет FK Ребенку

Я использую NH 2.1.2.4000

Спасибо

10
задан Andrew Bullock 7 July 2010 в 08:46
поделиться

2 ответа

Какова настройка каскада для каскадирования изменений от Child к коллекции GrandChildren? Я думаю, что NHibernate выбрасывает это исключение, если коллекция грязная, но настройка каскада не приводит к сохранению изменений.

0
ответ дан 4 December 2019 в 04:35
поделиться

Вы можете использовать session.Load для ссылки на существующий экземпляр Child без обращения к базе данных. Думаю, это должно сработать:

session.Save(new Parent { Child = session.Load(existingParent.Child.Id) } );

Но проверьте, чтобы вызов .Id не вызвал обращение к БД.

0
ответ дан 4 December 2019 в 04:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: