代码之家  ›  专栏  ›  技术社区  ›  Alistair

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

  •  4
  • Alistair  · 技术社区  · 15 年前

    NHibernate自动保存对对象所做的任何更改,而不管提交事务时是否进行session.save/update调用。如。

    session.BeginTransaction();
    
    User user = repos.getUser("tony");
    
    user.Age = 34
    
    transaction.Commit();
    

    年龄已更新。当您想要从数据库中获取一个对象并在不保存这些更改的情况下进行一些更改时,这可能会很烦人。你可以进行会话。驱逐对象,但是你失去了加载代理的能力。

    有没有办法让NHibernate只在进行save/update调用时保存更改?

    更新:

    谢谢你的回复,没有人告诉我该怎么做(这可能不可能),所以我不会回答。

    您应该在事务中包装所有db调用,并提交该事务以关闭它。

    我这样做是因为我对结果进行了复杂的排序,而这些排序并不是通过SQL/NHibernate真正能够实现的。不幸的是,NHibernate假设我想将这个新订单保存回DB。

    我的解决方法是在我的事务属性[transaction(onlyread=true)中添加一个属性,使其使用FlushMode

    我认为对于未来的工作,我只会确保只做一些我想坚持的改变。遗憾的是,没有只有在显式调用时才保存的选项。

    1 回复  |  直到 15 年前
        1
  •  3
  •   Diego Mijelshon    15 年前

    这就是NHibernate会话的设计原理。

    如果您希望手动执行所有操作,请使用 IStatelessSession 相反。您将丢失缓存、延迟加载等。