我必须保持同一个域同时在两个地方运行。一端必须能够“离线”运行,同时仍然必须在“在线”时不时地接收和发送数据到另一端。基本上我们有一个中央服务器,它汇总来自客户端的数据,并提供一些更新的数据(如产品的最新价格,新产品等)。我正在使用NHibernate来处理持久性问题。
我正在尝试使用NHibernate的Replicate
方法
session.Replicate(detached, ReplicationMode.LatestVersion);
从另一端获取对象,并合并/合并/附加到“本地”数据库。
无法执行,因为无法级联引用和集合。从FluentNHibernate(,甚至直接查看NHibernate源代码)查看级联选项,我找不到REPLICATE级联类型。从Hibernate的文档:
CascadeType.REPLICATE
我的问题是:有人知道为什么FluentNHibernate缺少这样的选项吗?是否有不同的/更好的方法来设置这种级联行为?
我和Cascade.Merge()
一起尝试了session.Merge(detached)
选项,但是虽然级联工作得很好,但它给我带来了一些麻烦,主要是因为id生成和optmistic锁定(版本控制)。
编辑:NHibernate的源代码DOES有一个ReplicateCascadeStyle
类,它映射到字符串“replicate”。 Cascade
/ CascadeConverter
类(来自Mapping.ByCode命名空间)没有Replicate作为选项。所以NHibernate本身支持复制上的级联,但我只想通过手动映射。
答案 0 :(得分:1)
好的,因为我正在使用Fluent NHibernate来映射大约100多个类,切换到xml映射对我来说不是一个选项。 所以我在GitHub上分享了Fluent NHibernate,添加了缺少的Cascade.Replicate选项并发送了pull request。
希望它有所帮助。