gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 18:35:27 25 4
gpt4 key购买 nike

无论您在提交事务时是否进行 session.save/update 调用,NHibernate 都会自动保存对对象所做的任何更改。例如。

session.BeginTransaction();

User user = repos.getUser("tony");

user.Age = 34

transaction.Commit();

年龄已更新。当您想从数据库获取对象并进行一些更改而不保存这些更改时,这可能会很烦人。您可以 session.evict 对象,但随后您将失去加载代理的能力。

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

更新:

感谢您的回复,没有人告诉我该怎么做(这可能是不可能的),所以我将不作回答。

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

我这样做是因为我通过 SQL/NHibernate 对结果进行了复杂的排序。不幸的是,NHibernate 假设我想将此新订单保存回数据库。

我的解决方法是向我的事务属性 [Transaction(onlyread = true)] 添加一个属性,这会导致它使用 FlushMode.Never

我认为对于 future 的工作,我只会确保只做出我想要坚持的改变。遗憾的是,没有仅在您明确调用时才保存的选项。

最佳答案

这就是 NHibernate session 的设计方式。

如果您更愿意手动完成所有操作,请使用 IStatelessSession反而。您将丢失缓存、延迟加载等。

关于NHibernate - 仅在进行保存/更新调用时保留更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4190978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com