NHibernate 慎用Session.Merge
Session.Merge其意思有兩個步驟,
一般用法: Session.Merge(obj);
1. 從當前的Session中獲取obj對象, 如果未獲取到則從數據庫獲取。
2. 把程序中的obj的值賦值給從數據庫中獲取的值, 意思是說把一個臨時對象轉換為一個持久化對象.
問題環境:
是在做關系處理的時候,把外鍵對象做了Merge, 這個時候外鍵對象發生了變化,同時在transaction commit的時候,也會同時持久化變化的obj對象,造成不想更新的外鍵對象,卻被更新.
解決辦法:
這個時候我們其實需要的是Session.Load來把某個臨時的對象,變成Attached對象,以便當前對象保存。而外鍵對象并不發生變化.
浙公網安備 33010602011771號