我有一個有趣的場景,我有一個給定的表映射到一個實體。但是,表格的另一個版本作爲夜間進程的一部分進行填充,並且與第一個表具有完全相同的列。在沒有涉及太多細節的情況下,第二個表格是一個包含少量記錄子集的「工作」表。有一些奇怪的業務規則,只能在大表中插入,而讀/更新只能在較小的表上完成。NHibernate映射問題 - 奇怪的場景
我該如何處理這個映射?換句話說,在同樣的情況下,我想要一個CRUD操作來使用一個映射,而在其他情況下,我想使用另一個表。
我有一個有趣的場景,我有一個給定的表映射到一個實體。但是,表格的另一個版本作爲夜間進程的一部分進行填充,並且與第一個表具有完全相同的列。在沒有涉及太多細節的情況下,第二個表格是一個包含少量記錄子集的「工作」表。有一些奇怪的業務規則,只能在大表中插入,而讀/更新只能在較小的表上完成。NHibernate映射問題 - 奇怪的場景
我該如何處理這個映射?換句話說,在同樣的情況下,我想要一個CRUD操作來使用一個映射,而在其他情況下,我想使用另一個表。
可以通過維護兩個會話工廠來完成這項工作,每個工作站將同一實體映射到每個表,或者在單個會話工廠中使用兩個不同實體,並將每個實體(類)映射到它自己的表。
我會把它作爲兩個獨立的實體來處理,並將它們分別映射到同一個表中。如果您正在使用存儲庫,則可以執行插入可能用於一個實體並在另一個實體中選擇/更新的規則。
創建兩個實體並將它們映射到各自的獨立表中。由於表格是彼此的鏡像,因此只能在整個應用程序中使用一個實體。當需要保存實體時,請檢查IsNew標誌。如果IsNew爲真,那麼只需保存(插入)即可。如果IsNew爲false,則將值複製到輔助實體並保存(更新)。這樣您就不必擔心在應用程序中傳遞兩個不同的實體。在閱讀代碼時,應該保持混淆,因爲您不必擔心使用哪個實體。
您也可以在加載/寫入操作上設置不同的sql - 在這種情況下,您可以在進程之間完全控制。