0
我有以下实体: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
也被映射代码,它的ID是一个自动生成的序列。 当我保存Item
时,我创建了一个新的Version
,将其分配给Version
属性并保存。我只想在Item
成功保存后才保存Version
实体。现在,当我这样做时,它会抛出一个TransientObjectException
。有没有可能解决这个问题?
所以级联意味着子实体会与父级一起保存,并且会在出现错误时回滚? – user6251216
Cascade.Persit将在保存父项时(明确地或当会话刷新时)保存所引用的实体。您有责任在交易中执行此操作,以便在发生问题时可以回滚。我已经用一个片段更新了答案,显示了如何完成。 –
该实体与运行代码分开保存,因此难以访问该事务。我想我必须处理Cascade.All这个工作。 – user6251216