来自NHibernate文档:
由于其固有的性质,使用此生成器的实体不能 通过 ISession 的 SaveOrUpdate() 方法保存。相反,你必须 显式指定 NHibernate 是否应保存对象或 通过调用 Save() 或 Update() 方法进行更新 是。
好的,所以当这些实体是另一个实体的子实体时,你想使用级联,以便在保存父级时,它的子级也被保留,我们怎么能给出我们应该选择Save
或Update
?
我应该吹走我的聚合根并开始拯救个别孩子吗?在框架中涵盖这一点有多难?当我离开垃圾车时,我不应该关灯,它应该是自动的。
这是可能的,有轻微且不完全令人反感的副作用。
如果我们使用 Version
和 UnsavedValue
配置,我们可以再次将SaveOrUpdate()
与我们的实体一起使用,并且级联按预期工作。
但是,由于版本值是在数据库端处理的,因此 NH 必须进行第二次调用才能检索最新版本(在我的例子中是时间戳)。
我更喜欢聚合根处理孩子,所以它对我有用。
。
public virtual byte[] Version { get; set; }
。
mapping.Version(m => m.Version)
.UnsavedValue(null)
.CustomSqlType("timestamp")
.CustomType("BinaryBlob")
.Generated.Always();