2009-10-14 41 views
0

我有一個場景是這樣的模擬類heirachy保存同一類結構,兩組表與NHibernate

  • 訂購
    • 訂單行
    • 產品
  • 客戶
    • OrderNotes

這產生像

  • 顧客一些表
  • 產品
  • CustomerOrderNotes(客戶ID,的OrderId)
  • 訂單(客戶ID)
    • OrderLines(的OrderId,產品編號)

我有了這個映射到NHibernate和一切工作正常。

所以,現在我想創建一個在這個對象heirachy的編輯版本,並堅持到數據庫以及。

我正在使用asp.net,並希望將編輯更改保存爲單獨的行,然後僅在發佈時纔會將更改提交到活動行。 (我正在計劃將編輯數據複製到實時數據)

使用相同的對象模型可以將編輯數據存儲在不同的表中嗎?

如果不是,我可以創建一個派生自Order的EditOrder類,但是EditOrder仍然會指向OrderLine和Customer。因此,OrderLine和Customer的任何更改都會保存到實時行中。 對於NHibernate的看來,我需要創建一個單獨的heirachy

  • EditOrder
    • EditOrderLine
    • EditProduct
  • EditCustomer
    • EditCustomerNotes

,而無需創建一個通用的龐然大物,讓你定義在此heirachy使用的每個類我不知道該走的路。

我真的想用一個階級的階級,而不是維持兩個階級的繼承人。

另一種選擇是將編輯中的對象heirachy序列化到用戶類中。不過,如果的類變化我必須全殲數據,而不是運行數據庫遷移腳本之一。

另一種解決方案是使用不同映射文件的其他數據庫/會話工廠。

處理這種情況的推薦方法是什麼?

回答

0

兩套表格支持兩種不同的狀態(發佈/等待批准(或類似)))。

如果可能,我建議在模型中使這個狀態顯式化,並將所有內容保存在同一個表中。

發佈對象的客戶端然後將以某種方式必須排除未發佈的對象。

+0

是啊,這是一個選項,但隨後因爲你說有這個只要你發佈的數據做一個選擇過濾。 同樣,每個對象必須知道它的狀態,除非所有的查詢鏈接到一個知道,如果它被髮布或只需編輯數據父實體。爲了編輯這會是這樣,但如果我只是想拔出客戶或Notes我不一定要加入的順序。 眼下打算序列化的編輯數據來嘗試二進制。雖然這有它自己的問題。 – Ian 2009-10-16 15:50:42