NHibernate自动保存对对象所做的任何更改,无论是否在提交事务时进行session.save/update调用。 EG。
session.BeginTransaction();
User user = repos.getUser("tony");
user.Age = 34
transaction.Commit();
年龄更新。当您想要从DB获取对象并进行一些更改而不保存这些更改时,这可能很烦人。你可以session.evict对象,但是你失去了加载代理的能力。
如果进行保存/更新调用,有没有办法让NHibernate只保留更改?
更新
感谢您的回复,没有人告诉我该怎么做(而且可能不可能),所以我将不予回答。
您应该在事务中包装所有db调用并提交该事务以关闭它。
我这样做是因为我对结果进行了复杂的排序,这是通过SQL / NHibernate实现的。不幸的是,NHibernate假设我想将这个新订单保存回数据库。
我的解决方法是在我的事务属性[Transaction(onlyread = true)]中添加一个属性,这会导致它使用FlushMode.Never
我认为,对于未来的工作,我只会确保只进行我想要保留的更改。可惜没有选项只能在你明确调用它时保存。
答案 0 :(得分:3)
这就是NHibernate会话的设计工作方式。
如果您宁愿手动完成所有操作,请改用IStatelessSession
。你将失去缓存,延迟加载等。