gpt4 book ai didi

c# - .Net 应用中并发问题的最佳实践

转载 作者:行者123 更新时间:2023-11-30 22:48:49 25 4
gpt4 key购买 nike

我们计划将现有的 VB6 应用程序升级到 C# (VS2008)。ADO.Net 在访问数据时更遵循断开连接的策略。我正在考虑尝试使用 Entity Framework ,因为如果您想加快开发速度,强烈建议使用 ORM 工具。并且 EF 使用乐观锁定。

例如,当 2 个用户打开同一个“客户”时,您如何解决这个古老的问题。ADO.net 建议在保存记录时使用冲突异常检查记录是否已更改。

在旧的 VB6 应用程序中,我们曾经有 2 个系统:- 在记录中保留一个名为“Locked”的位和一个名为“LockedBy”的文本字段 这很容易实现和使用,但当应用程序崩溃或网络连接出现问题时,该记录仍将被锁定。- 因为我们只使用 MSSQL 作为数据库,所以我们一直在为那些拥有 SQL 2000 或更高版本的客户使用 MSSQL 的行级锁定功能。

现代 .Net 应用程序如何处理这个问题,您如何解决 .Net 应用程序中的这个古老问题?

欢迎任何想法、评论或信息...

问候,斯文·皮特斯

最佳答案

乐观锁最常见的实现是在每个表中除了主键之外还有一个版本列(通常是 TIMESTAMP)。

当您从表中加载数据时,您必须在内存中加载版本并且永远不要更改它(通常它只是一个不透明的字节数组)。

当您保存更新后的表时,您会启动一个非常短暂的事务并首先读取 Version 列的当前值并将其与内存中的值进行比较。

  • 如果它们相等,则表示没有其他人修改过数据,您可以安全地保存它。
  • 如果它们不同,则意味着其他人在读取数据后修改了数据,您必须解决该冲突。

AFAIR, Entity Framework 支持这种开箱即用的乐观锁定。

关于c# - .Net 应用中并发问题的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1458854/

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