Объект NHibernate ссылается на несохраненный экземпляр переходного процесса, сохраняя временный экземпляр перед промывкой
Я пытаюсь сохранить сложный объект, который содержит много ссылочных элементов внутри, и он отлично работает в большинстве случаев.
Однако в некоторых случаях мы получаем исключение ниже,
ссылается объект на несохраненный экземпляр переходного процесса - сохраняет временный экземпляр перед сбросом или устанавливает действие каскада для свойства на то, что сделает его автосохранением. Тип: Namespace.Core.Client.ClientDetails, Entity: Namespace.Core.Client.ClientDetails
Проблема в том, что в моем сложном объекте, который мы пытаемся сохранить, есть около 12 элементов ClientDetails. Есть ли способ определить, какой экземпляр объекта вызвал эту проблему?
путем регистрации в NHibernate или каким-либо другим способом?
Мой образец кода, используемый для сохранения, как показано ниже,
_repository.Save<SuperParent>(obj);
_repository.Flush();
Обратите внимание, что когда я устанавливаю Nhibernate show_sql в true, я могу видеть все корректно сгенерированные запросы, но когда вызывается флеш, генерируется исключение.
Пожалуйста, помогите решить проблему.
Ответы
Ответ 1
Исключение означает, что существует несохраненный экземпляр ClientDetails
, на который ссылается этот объект. Вы должны либо сохранить его вручную, прежде чем сохранять родительский
session.Save(Parent.SomeDetail);
или установите Cascade.SaveOrUpdate
в сопоставлениях ссылок в родительском сопоставлении.
Ответ 2
Если вы внимательно прочитали:
... он временный экземпляр перед промывкой или установить каскадное действие для свойства, которое сделает его автосохранением
Итак, возможно, вы можете добавить Cascade в ссылку, например:
References(x => x.ClientDetails).Cascade.All().Column("ClientDetailsId")
.Not.Nullable(); //Or nullable, this depends on your schedule