1

来自 NHibernate 文档:

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

好的,所以当这些实体是另一个实体的子实体时,并且您想使用级联以便在保存父实体时它的子实体也被持久化,我们怎么能给出我们应该选择Saveor Update

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

4

1 回答 1

0

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

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

但是,因为 Version 值是在 db 端处理的,所以 NH 必须进行第二次调用以检索最新版本(在我的情况下是时间戳)。

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

...

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

...

mapping.Version(m => m.Version)
.UnsavedValue(null)
.CustomSqlType("timestamp")
.CustomType("BinaryBlob")
.Generated.Always();
于 2012-12-31T15:17:19.017 回答