2013-10-17 102 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

希望它可以幫助別人。