来自NHibernate docs:
由于其固有的性质,使用此生成器的实体不可能 通过ISession的SaveOrUpdate()方法保存。相反,你必须 如果要保存对象,则明确指定NHibernate 通过调用的Save()或Update()方法更新 的ISession。
好的,所以当这些实体是另一个实体的子节点时,你想要使用级联,这样当父节点被保存时,它的子节点也会被持久化,我们怎么能认为我们应该选择Save
或者Update
?
我是应该把我的聚集根吹走并开始拯救个别孩子?在框架中覆盖这个有多难?当我离开crapper时,我不应该关掉灯,它应该是我想的自动。
答案 0 :(得分:0)
这可能会产生轻微且不完全令人反感的副作用。
如果我们使用Version
和UnsavedValue
配置,我们可以再次使用SaveOrUpdate()
我们的实体和级联按预期工作。
但是,因为版本值是在db-side处理的,所以NH必须再次调用以检索最新版本(在我的例子中是时间戳)。
我更喜欢聚集根处理孩子的保存,所以它对我有用。
...
public virtual byte[] Version { get; set; }
...
mapping.Version(m => m.Version)
.UnsavedValue(null)
.CustomSqlType("timestamp")
.CustomType("BinaryBlob")
.Generated.Always();