NHibernate - 仅在进行保存/更新调用时保持更改

时间:2010-11-16 03:30:00

标签: nhibernate

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

我认为,对于未来的工作,我只会确保只进行我想要保留的更改。可惜没有选项只能在你明确调用它时保存。

1 个答案:

答案 0 :(得分:3)

这就是NHibernate会话的设计工作方式。

如果您宁愿手动完成所有操作,请改用IStatelessSession。你将失去缓存,延迟加载等。