NHibernate会自动保存对对象所做的任何更改,无论您是否在提交事务时进行session.save/update调用。例如。NHibernate - 在保存/更新调用时只保留更改
session.BeginTransaction();
User user = repos.getUser("tony");
user.Age = 34
transaction.Commit();
年龄得到更新。当您想要从数据库获取对象并进行一些更改而不保存这些更改时,这可能会很烦人。你可以session.evict对象,但是你失去了加载代理的能力。
有没有办法让NHibernate只保存更改如果保存/更新调用?
更新:
感谢回应,没有人告诉我该怎么做(和它可能不会是可能的),所以我要离开它无人接听。
你应该将所有数据库调用包装在一个事务中,并提交该事务来关闭它。
我这样做是因为有复杂的排序我做的结果是不可能通过SQL/NHibernate的。不幸的是,NHibernate假设我想将这个新订单保存回数据库。
我的解决方法是将属性添加到我的事务属性[交易(onlyread =真)],导致其使用FlushMode.Never
我想对于今后的工作,我将只是确保只更改该我想坚持下去。可惜没有选择只在你明确地调用它的时候保存。
如果你把你的transaction.commit放在user.Age = 34之前会发生什么? – blindmeis 2010-11-16 07:43:27
那么,您不必开立交易... – flq 2010-11-16 12:55:04
您为什么要对实体进行更改而不坚持它们?也许答案在于改变设计,而不是NHibernate的工作方式。 – 2010-11-16 12:55:28