长期运行的实体框架事务

本文关键字:框架 事务 实体 运行 | 更新日期: 2023-09-27 17:57:56

当用户打开某个实体的编辑表单时,我想锁定这个实体,并让她进行任何更改。在编辑过程中,她需要确保没有其他人对其进行任何编辑操作

如何在实体框架(C#)4+数据库MS SQL Server 2008中锁定实体?

提前感谢您!

长期运行的实体框架事务

这个主意不好,尤其是在有许多并发用户的情况下。如果锁定数据库中的行,则会破坏可伸缩性。

最好检测其他人是否进行了编辑,如果是,通知用户并让他们决定该做什么。

对于字段来说,timestamp/rowversion数据类型是一个很好的选择,可以用来确定是否对行数据进行了任何更改。

有两种方法可以处理这些情况:

  • 乐观并发,允许并发编辑和插入,并在违反并发规则时捕获异常。乐观并发是通过保护相同项的插入的唯一约束和保护对同一项的并发更新的时间戳/行版本列来实现的。如果其他人在当前用户进行更改时更新行,则应用程序将在保存期间抛出OptimisticConcurrencyException,并且您必须允许用户覆盖其他更改或重新加载新存储的数据。

  • 悲观并发,其中记录在任何客户端执行的操作期间被锁定,从而阻止其他客户端更新同一记录。悲观并发通常是由添加到表中的自定义列(如LockedByLockedAt等)强制执行的。一旦这些列被填充,其他人就无法选择要编辑的记录。LockedAt可以帮助您实现一些已发布锁的自动过期。长期运行的"EF事务"不是长期运行的数据库事务。

您最初的描述引出了第二个场景,这在某些应用程序中是有意义的。