Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf nHibernate:重置对象';原始状态_Wpf_Nhibernate_Session State - Fatal编程技术网

Wpf nHibernate:重置对象';原始状态

Wpf nHibernate:重置对象';原始状态,wpf,nhibernate,session-state,Wpf,Nhibernate,Session State,我有一个非常基本的问题。我正在使用WPF绑定编辑一个对象,该对象由会话加载。如果由于双向绑定和有状态会话,有人在表单中编辑此对象,每当我关闭会话时,在表单中对对象所做的更改都会存储回数据库。避免这种情况的最佳方法是什么 我知道的方法是: 卷影复制对象并将复制的对象用作DataContext(我现在使用的方法) i会话。清除 使用IStatelessSession 在关闭会话之前,是否有任何方法将对象重置为其原始形式?如果您查看以下内容: 这是一个查找脏属性的示例。NHibernate通过Enti

我有一个非常基本的问题。我正在使用WPF绑定编辑一个对象,该对象由
会话加载。如果由于双向绑定和有状态会话,有人在表单中编辑此对象,每当我关闭会话时,在表单中对对象所做的更改都会存储回数据库。避免这种情况的最佳方法是什么

我知道的方法是:

  • 卷影复制对象并将复制的对象用作
    DataContext
    (我现在使用的方法)
  • i会话。清除
  • 使用IStatelessSession
  • 在关闭
    会话之前,是否有任何方法将对象重置为其原始形式?

    如果您查看以下内容:

    这是一个查找脏属性的示例。NHibernate通过EntityEntry对象在内部跟踪持久对象的状态

    这对您很有用,因为对上面的方法稍加修改,您就可以恢复旧值。。。您可以使用它重置属性

    至于关闭会话导致对象刷新到数据库,可以将会话FlushMode设置为FlushMode.Never。这意味着在调用Session.Flush()之前不会发生数据库同步


    或者,您可以挂接到iFlusEntityEventListener以重置对象状态。在谷歌上使用NHibernate事件系统有一些合理的例子

    我建议使用事务。如果是这样的话,您只是回滚事务?你觉得怎么样?

    请参见:

    随后调用Flush()时,该对象的状态将与数据库同步。如果不希望发生此同步,或者正在处理大量对象并需要高效地管理内存,则可以使用execit()方法从一级缓存中删除对象及其集合


    我认为这听起来像是您想要的。

    a)这是一个不必要的事务,可能会锁定行,具体取决于隔离级别。b)无助于重置对象。哇!“交易是不必要的”不,我不是这个意思。我的意思是,仅仅为了回滚而打开交易是没有必要的。。。特别是当有其他琐碎的方法时。仅供参考,这就是隐式事务。这个例子为我做了。谢谢尽管如此,语句“这意味着在调用
    Session.Flush()
    ”之前不会发生数据库同步”是错误的。如果我使用的是事务,则提交将同步数据库,而不考虑
    FlushMode
    的设置。我假设您没有使用事务。如果你不打算更新数据,那又有什么意义呢?我并不是说我正在使用数据,我只是澄清可能存在例外情况。:)