我有以下实体:
<div class="row" ng-app="roomsApp">
在实体映射中我有:
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");
}
也由代码映射,它的ID是自动生成的序列。
保存Version
后,我创建了一个新的Item
,将其分配给Version
属性并保存。我想在Version
成功保存后才保存Version
实体。现在,当我这样做时,它会抛出一个Item
。有可能解决这个问题吗?
答案 0 :(得分:1)
您无法通过映射属性(Item-&gt; Version)保存引用瞬态对象的实体,除非在映射属性时指定Cascade.Persist或Cascade.All。
另一件事是,由于您应该在事务中运行该代码,因此插入顺序无关紧要。如果在保存版本之后但在保存项目之前抛出异常(或发生任何其他错误),则应回滚事务,并且没有人会看到新版本。
下面的代码段显示了如何使用nHibernate开始/提交事务。请注意,如果事务在处理之前没有被提交,那么事务将被回滚。
using(var session = sessionFactory.OpenSession())
using(var transaction = session.BeginTransaction())
{
// Do your thing here...
transaction.Commit();
}