我有一個非常類似的情況,以什麼在this question描述:
Engineer
和Manager
無論從Contact
繼承和Engineer
可以晉升(或降級,這取決於你的觀點),以Manager
。nhibernate將實體從一種類型轉換爲另一種類型:如何處理集合?
區別在於我記錄了聯繫人提交的所有訂單。
含義 - 我的Contact
類有一個IList<Order> Orders
屬性,它可以由100,000個訂單組成。 (在你問之前 - 顯然這個屬性沒有加載到內存中,它只是Order
的Contact OrderSubmitter
屬性的另一端)。
我喜歡@Jamie Ide提出的排序的'拷貝構造函數'的想法。
問題是,我可以更改Order
對象的引用而不將它們加載到內存中嗎?
[編輯]
是的,我的CAN用HQL update。
但是,這會產生一個不同的問題 - 我試圖創建一個實體並讓其他實體在同一個事務中引用它。意思是:
Manager manager = new Manager(engineer);
session.Save(manager);
session.CreateQuery("update Order set OrderSubmitter = :manager where OrderSubmitter = :engineer")
.SetParameter("manager",manager)
.SetParameter("engineer",engineer)
.ExecuteUpdate();
session.Transaction.Commit();
however-使用executeUpdate immidiately發生,而Manager
實體只保存 '提交'。
這當然會導致外鍵異常。
我可以通過在Save(manager)
調用後明確調用session.Flush()
來避開它,但這似乎不是很好的做法。
有什麼想法?
+1好主意!謝謝 –