NHibernate 慎用Session.Merge
Session.Merge其意思有两个步骤,
一般用法: Session.Merge(obj);
1. 从当前的Session中获取obj对象, 如果未获取到则从数据库获取。
2. 把程序中的obj的值赋值给从数据库中获取的值, 意思是说把一个临时对象转换为一个持久化对象.
问题环境:
是在做关系处理的时候,把外键对象做了Merge, 这个时候外键对象发生了变化,同时在transaction commit的时候,也会同时持久化变化的obj对象,造成不想更新的外键对象,却被更新.
解决办法:
这个时候我们其实需要的是Session.Load来把某个临时的对象,变成Attached对象,以便当前对象保存。而外键对象并不发生变化.