2010-06-29 100 views
0

可能是一個愚蠢的問題,但我仍然試圖圍繞nHibernate包裹頭部。如何確定nHibernate對象是否發生了變化

據我所知,使用該軟件,nHibernate要求您做一點額外的處理,以妥善保存更改。

讓我們想象一下我有一個可以包含很多對象Y的對象X.我將創建一個包含2個Y的X,每個Y都有自己的屬性。然後我決定我要更新X.我要添加一個新的Y,並更改現有的Y中的一個。

所以我使用它的ID加載我的對象X.然後,我遍歷所添加的Y,將它們添加到X並使用更新語句保存批次。

如果你這樣做,你會發現「老」Y在數據庫中成爲孤兒。當我想到這件事的時候,正是我期望會發生的事情 - 畢竟我還沒有擺脫那些東西,我剛剛創建了一些新的東西。

所以有兩種方法來看待這個。要麼我應該刪除所有Y數據然後重新創建它,或者我應該能夠標記爲nHibernate,我正在做的是一個更改,它應該更新現有對象而不是創建新對象。麻煩的是,我不確定哪個是「正確」的方法,或者如何最好地做到這一點 - 前者看起來效率非常低,後者意味着設置了很多「改變」的標誌和非常繁瑣的代碼。

所以我敢肯定,我的愚蠢一定會有一個更簡單的解決方案。有人能指出我在最好的辦法以及如何最好地處理它NHibernate的......也就是說,如果這個問題讓任​​何意義:)

乾杯, 馬特

回答

1

你可能有一個映射或使用問題。

配置正確,您的使用情況應該是這樣的:

using (var session = sessionFactory.OpenSession()) 
using (var tx = session.BeginTransaction()) 
{ 
    var x = session.Get<X>(theId); 
    x.Ys[0].SomeProperty = theNewValue; 
    x.Ys.Add(theNewY); 
    tx.Commit(); 
} 

你應該張貼關於實際的類,映射和使用的詳細信息。

此外,我建議您閱讀完整的文檔:http://nhibernate.info/doc/nh/en/index.html。這只是幾個小時,這將爲您節省很多天的挫折。

相關問題