在具有 Id() 的实体上使用级联.Generated By.Assigned().



来自NHibernate文档:

由于其固有的性质,使用此生成器的实体不能 通过 ISession 的 SaveOrUpdate() 方法保存。相反,你必须 显式指定 NHibernate 是否应保存对象或 通过调用 Save() 或 Update() 方法进行更新 是。

好的,所以当这些实体是另一个实体的子实体时,你想使用级联,以便在保存父级时,它的子级也被保留,我们怎么能给出我们应该选择SaveUpdate

我应该吹走我的聚合根并开始拯救个别孩子吗?在框架中涵盖这一点有多难?当我离开垃圾车时,我不应该关灯,它应该是自动的。

这是可能的,有轻微且不完全令人反感的副作用。

如果我们使用 VersionUnsavedValue 配置,我们可以再次将SaveOrUpdate()与我们的实体一起使用,并且级联按预期工作。

但是,由于版本值是在数据库端处理的,因此 NH 必须进行第二次调用才能检索最新版本(在我的例子中是时间戳)。

更喜欢聚合根处理孩子,所以它对我有用。

public virtual byte[] Version { get; set; }

mapping.Version(m => m.Version)
.UnsavedValue(null)
.CustomSqlType("timestamp")
.CustomType("BinaryBlob")
.Generated.Always();

最新更新