У меня есть следующий объект:NHibernate кода - Сохранить объект с неспасенным (переходным) дочерним объектом
public class Item
{
public virtual long ID { get; set; }
public virtual Version Version { get; set;}
More properties...
}
В отображении объекта У меня есть:
ManyToOne(p => p.Version, m =>
{
m.Column("VERSION_ID");
}
Субъект Version
также отображается на код и его идентификатор - это автоматически сгенерированная последовательность. Когда я сохраняю Item
, я создаю новый Version
, присваиваю его Version
и сохраняю его. Я хочу сохранить объект Version
только после успешного сохранения Item
. Теперь он бросает TransientObjectException
, когда я это делаю. Можно ли это решить?
Итак, каскадирование означает, что дочерний объект будет сохранен вместе с родителем и будет откат в случае ошибки? – user6251216
Cascade.Persit сохраняет объект, на который ссылается, когда родительский объект сохраняется (явно или когда сеанс очищается). Вы несете ответственность за это в транзакции, которую можно отбросить в случае возникновения проблем. Я обновил ответ с помощью фрагмента, показывающего, как это можно сделать. –
Сущность сохраняется отдельно от текущего кода, поэтому доступ к транзакции затруднен. Я думаю, мне придется работать с Cascade. Все для этого, чтобы работать. – user6251216