2009-11-08 45 views
4

我們使用NHibernate一個相當強大的系統,我們是從一個單一的數據庫服務器遷移的中間有兩個服務器,一個是管理,一個用於我們的面向公衆的網站。這主要是因爲我們可以使用不影響當前網站的工作流執行內容管理等操作。到今天爲止,它們是同一臺服務器中的兩個數據庫,但隨着時間的推移,我可以看到使用兩臺物理機器通過Web服務調用來推送數據。強制的標識插入與NHibernate /功能NHibernate

因此,作爲一個例子,我們的營銷人員的一個決定通過管理推出新的促銷活動,從現在開始安排2周後進行。我們正在制定一個計劃系統,在啓動時將推廣到我們的生產服務器。目的是爲數據推送使用相同的NHibernate提供者,但我們需要保持參照完整性。

我們使用功能NHibernate,我可以看到寫兩個不同的類映射,然後使用某種形式的選擇,其加載地圖的依賴注入(IE結構圖)。我希望得到更好的答案,因爲隨着系統的發展,這似乎不可能維持。有什麼建議麼?

+0

而到底什麼是你的問題?你想在兩臺服務器上使用相同的ID? – BennyM 2009-11-08 15:25:36

+0

這是正確的。我已經編寫了關於ISession - Replicate,Merge,SaveOrUpdate,SaveOrUpdateCopy上的各種方法的測試。所有這些都會引發錯誤,而不是使用當前ID生成新的ID。我看到了方法CurrentSession()。Replicate(entity,ReplicationMode.Overwrite); - 它看起來最有前途。這可能是一個錯誤? – jcavaliere 2009-11-08 15:46:55

+0

你使用db生成的ID嗎? – BennyM 2009-11-08 18:34:13

回答

4

不與DB支持ISession.Replicate生成的ID值。如NHibernate問題跟蹤器中的this issue所示。

  • 我建議要麼使用自己的ID 發電機或GUID/Guid.Comb因爲 你就可以使用NHibernate的 複製在這種情況下(如 的問題解釋)
  • 你可以也寫你自己的複製代碼,不使用NHibernate,如果它足夠簡單,這是可行的。
  • 使用您的數據庫支持的複製技術。我之前使用過MS SQL Server之間的複製,而且這並不難。我很確定其他RDBMS支持類似的東西。