我正在使用NHibernate的項目。 我不會保持會話打開。當我需要獲取或保存對象時,我打開會話,執行我所需的操作,然後關閉會話。所以我一直在處理與session分離的對象。什麼是當會話分離時只更新NHibernate中更改的屬性的最佳方法?
例如,當我需要從數據庫中獲取對象時,我打開會話,然後調用session.Get()並關閉會話。然後我更新分離對象的一些屬性。當我需要保存對數據庫的更改時,我調用打開會話的方法,調用session.Update(myObject)並關閉會話。
但是,當我這樣做,NHibernate生成的SQL更新我已映射的所有字段,即使他們沒有改變。我的建議是當對象脫離會話時,NHibernate無法跟蹤已做出的更改。 當您只想更新從會話中分離的對象時,您使用什麼方法?如何跟蹤分離對象的更改?
感謝
我在數據庫中沒有任何觸發器。那麼,我想這樣做,只是因爲我用來更新只有屬性已被更改。你的意思是盲目更新對象可能會更快,並且Merge需要一些額外資源? – 2009-08-07 09:41:25
順便說一句,爲什麼我應該使用select-before-update =「true」,如果它沒有它的工作? – 2009-08-07 11:18:31
合併需要額外的查詢,這是一個額外的數據庫往返並有其開銷。我認爲select-before-update只是爲了避免合併。合併對商業邏輯有影響。 – 2009-08-07 11:50:17