2013-10-17 79 views
1

我必须保持同一个域在同一时间在两个地方运行。一端必须能够“离线”运行,同时还必须在“在线”时不时收发数据到另一端。基本上我们有一个中央服务器,它汇总来自客户端的数据并提供一些更新的数据(如产品的最新价格,新产品等)。我使用NHibernate来照顾持久性。为什么FluentNHibernate缺少CascadeType.REPLICATE?

我试图使用NHibernate的Replicate方法

session.Replicate(detached, ReplicationMode.LatestVersion); 

获得从另一端的正在添加对象和合并/合并/连接到“本地”数据库。

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

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

session.Merge(detached)一起尝试Cascade.Merge()的选择,不过虽然级联工作得很好,它给我有些头疼,主要是因为ID生成和optmistic锁(版本)的。

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

回答

1

好的,因为我使用Fluent NHibernate映射大约100多个类,切换到xml映射不是我的选择。 因此,我在GitHub上分流Fluent NHibernate,添加了丢失的Cascade.Replicate选项并发送了一个pull request

希望它可以帮助别人。