gpt4 book ai didi

c# - 如何在 NHibernate 中实现并发

转载 作者:行者123 更新时间:2023-11-30 21:12:07 27 4
gpt4 key购买 nike

我有两个 PersonPersonDTO 类,我正在使用 NHibernate 来保存这些对象。当我有一个用户时,没有问题,一旦另一个用户要更新另一个用户正在更新它的对象。然后两者都可以更新同一个对象,因为它是由另一个用户更新的,所以其中一个更改将丢失。

为了实现并发性,我使用了两种方式,它们都面临着问题。

  • 第一种解决方案:使用Person构造函数来更新对象
  • 第二种方法:使用GetByID方法

第一种方法可以很好地解决任何问题,但不幸的是,我没有足够的权限来完全加载 Person 及其依赖项。所以我必须使用第二种方法。

在第二种方法中,当我设置(更新)Version 到最后一秒时,它是 o,但是 NHibernate 使用它的旧版本,所以我的更改不会应用。

看下面的代码

通过 ID 加载人员

person = locator.PersonRepository.GetById(dto.Id);

版本字段由新值加载。但我需要从我的 PersonDTO 对象中设置它

person.Version = dto.Version

在更新过程中,NHibernate 将旧值 传递给 sql,我不会遇到并发错误。

这样实现并发应该怎么做。提供任何帮助。

最佳答案

Ayende 有一个 interesting article关于 nHibernate 支持的不同类型的并发。如果您设置了一个版本列,那么 nHibernate 将自动管理该版本的值,并在您尝试更新一个已经过时的对象时抛出一个 StaleObjectException

你可以使用这个异常来通知用户或者实现更复杂的自动并发解决方法。

关于c# - 如何在 NHibernate 中实现并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7676047/

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