gpt4 book ai didi

NHibernate:从两个 session 修改实体的不同字段

转载 作者:行者123 更新时间:2023-12-03 19:48:51 24 4
gpt4 key购买 nike

我有一个包含多个字段的实体。可以对其执行两种类型的操作:一种是长操作,通常由用户启动,另一种是短操作,由系统定期运行。这两者都更新实体,但它们涉及不同的领域。

不能有两个并发的长操作或两个并发的短操作。但是系统可能会在一个长操作正在进行时安排一个短操作,两者应该同时执行。由于他们涉及的领域不同,我相信这应该是可能的。

我认为 NHibernate 的更改跟踪应该可以解决这个问题 - 即,如果一个 session 加载一个实体并更新一些字段,而另一个 session 加载相同的实体并更新不同的字段,那么两者不会发生冲突。但是,我觉得我不应该依赖它,因为它听起来像是“优化”或“实现细节”。我倾向于将更改跟踪视为减少数据库流量的优化,我不希望系统的功能依赖于它。此外,如果我决定为此实体实现开放式并发,那么我就有可能遇到 StaleObjectException,即使我可以保证不会发生实际冲突。

实现此目标的最佳方法是什么?我应该将实体一分为二吗?这不会影响数据库的一致性吗(例如,如果数据库中只有实体的“一半”怎么办)?我可以使用 NHibernate 显式设置实体的单个字段吗?我不想依靠更改跟踪来实现功能是错误的吗?

如果重要的话,我正在使用 Fluent NHibernate。

最佳答案

您可以使用动态更新映射实体。

  • dynamic-update(可选,默认为 false):指定应该在运行时生成 UPDATE SQL,并且只包含那些值已更改的列。

如果启用动态更新,您将可以选择乐观锁定策略:

  • version 检查版本/时间戳列
  • all 检查所有列
  • dirty 检查更改的列
  • none 不使用乐观锁

更多信息 here .

关于NHibernate:从两个 session 修改实体的不同字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5627133/

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