根据注释,您要尝试做的是创建一个代理,而无需从DB获取当前状态(使用
session.Load),然后发出动态更新。
这是行不通的。NHibernate不会记录对属性的单独更改;相反,它:
- 将被跟踪实体的当前状态与从数据库中检索到的属性值的快照进行比较。
- 基于此,确定哪些实体是脏的(即具有更改)
- 它生成SQL更新语句。如果使用
dynamic-update
,它将仅包含修改后的属性。
如果使用
session.Load,则在访问
Deleted属性后,NH将从数据库中加载记录。在已跟踪的实体上使用
session.Load还是
session.Get,
session.Update都是禁止 *** 作。
或者,如果您已经拥有所有订单属性的状态,则可以不加载而进行更新:
var order = GetTheOrderFromMemory();order.Deleted = true;session.Update(order);transaction.Commit();
这 不会 尊重
dynamic-update,因为NH没有快照可以与…进行比较。
…这就是为什么HQL是对单个属性进行一次性更新的唯一方法的原因。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)