NHibernate 慎用Session.Merge

DukeCheng發表於2015-11-21

Session.Merge其意思有兩個步驟,

一般用法: Session.Merge(obj);

1. 從當前的Session中獲取obj物件, 如果未獲取到則從資料庫獲取。

2. 把程式中的obj的值賦值給從資料庫中獲取的值, 意思是說把一個臨時物件轉換為一個持久化物件.

 

問題環境:

是在做關係處理的時候,把外來鍵物件做了Merge, 這個時候外來鍵物件發生了變化,同時在transaction commit的時候,也會同時持久化變化的obj物件,造成不想更新的外來鍵物件,卻被更新.

 

解決辦法:

這個時候我們其實需要的是Session.Load來把某個臨時的物件,變成Attached物件,以便當前物件儲存。而外來鍵物件並不發生變化.

相關文章