1

我必须保持同一个域同时在两个地方运行。一端必须能够“离线”运行,而“在线”时还必须时不时地向另一端接收和发送数据。基本上,我们有一个中央服务器,它汇总来自客户端的数据并提供一些更新的数据(如产品的最新价格、新产品等)。我正在使用 NHibernate 来处理持久性。

我正在尝试使用 NHibernate 的Replicate方法

session.Replicate(detached, ReplicationMode.LatestVersion);

获取来自另一端的对象并合并/合并/附加到“本地”数据库。

它无法执行,因为它不能级联引用和集合。查看 FluentNHibernate 的级联选项(甚至直接查看 NHibernate 源代码)我找不到 REPLICATE 级联类型。来自 Hibernate 的文档: CascadeType.REPLICATE

我的问题是:有人知道为什么 FluentNHibernate 缺少这样的选项吗?有没有不同/更好的方法来设置这种级联行为?

我尝试了与Cascade.Merge()一起使用的选项session.Merge(detached),但是虽然级联工作得很好,但它让我有些头疼,主要是因为 id 生成和 optmistic 锁(版本控制)。

编辑:NHibernate 的源代码确实有一个ReplicateCascadeStyle映射到字符串“replicate”的类。/类CascadeCascadeConverter来自 Mapping.ByCode 命名空间)没有 Replicate 作为选项。所以 NHibernate 本身支持 Replicate 上的级联,但我猜只能通过手动映射。

4

1 回答 1

2

好的,因为我使用 Fluent NHibernate 来映射大约 100 多个类,所以切换到 xml 映射对我来说不是一个选项。所以我在 GitHub 上 fork Fluent NHibernate,添加了缺少的 Cascade.Replicate 选项并发送了一个pull request

希望它可以帮助某人。

于 2013-10-17T21:25:14.377 回答