我有一个非常基本的查询。我正在使用WPF Binding来编辑由ISession
加载的对象。如果有人在表单中编辑此对象,由于双向绑定和有状态会话,每当我关闭会话时,对表单中所做对象的更改都会存储回数据库中。哪种方法可以避免这种情况?
我知道的方法:
DataContext
(我现在使用的方法)。ISession.Clear
IStatelessSession
。 在关闭ISession
之前,有没有办法将对象重置为原始格式?
答案 0 :(得分:1)
如果你看这里:http://nhforge.org/wikis/howtonh/finding-dirty-properties-in-nhibernate.aspx
这是查找脏属性的示例。 NHibernate通过EntityEntry对象在内部跟踪持久对象的状态。
这对你很有用,因为只需对上面的方法进行一些修改,你就可以得到旧的值......你可以用它来重置属性。
至于关闭会话导致将对象刷新到数据库,可以将会话FlushMode设置为FlushMode.Never。这意味着在调用Session.Flush()之前不会发生数据库同步。
或者,您可以挂钩到IFlushEntityEventListener以重置对象状态。有一个在谷歌上使用NHibernate事件系统的合理例子。
答案 1 :(得分:1)
请参阅Managing the caches上的NHibernate Forge:
随后调用Flush()时,该对象的状态将与数据库同步。如果您不希望发生此同步,或者您正在处理大量对象并需要有效管理内存,则可以使用Evict()方法从第一级缓存中删除对象及其集合。
我认为这听起来像你想要的。
答案 2 :(得分:0)
我建议使用交易。如果是这种情况,您只需回滚交易吗?你觉得怎么样?