Session.Merge其意思有兩個步驟,
一般用法: Session.Merge(obj);
1. 從當前的Session中獲取obj物件, 如果未獲取到則從資料庫獲取。
2. 把程式中的obj的值賦值給從資料庫中獲取的值, 意思是說把一個臨時物件轉換為一個持久化物件.
問題環境:
是在做關係處理的時候,把外來鍵物件做了Merge, 這個時候外來鍵物件發生了變化,同時在transaction commit的時候,也會同時持久化變化的obj物件,造成不想更新的外來鍵物件,卻被更新.
解決辦法:
這個時候我們其實需要的是Session.Load來把某個臨時的物件,變成Attached物件,以便當前物件儲存。而外來鍵物件並不發生變化.