繁体   English   中英

使用实体框架时锁定记录以进行编辑的最佳实践

[英]Best practice to lock a record for editing while using entity framework

不太确定如何措辞这个问题,但是就到这里了。 我正在一个项目中,其中多个客户端应用程序正在通过WCF服务访问一个数据源。 可能无关紧要,但是WCF服务正在利用实体框架访问此数据源。 每当客户端查询记录以进行编辑时,我都希望在第一个客户端完成更新之前,其他客户端无法编辑该记录。

如果我错了,请纠正我,但我相信这也称为同步和异步数据访问。

我的问题是,实现此功能的行业最佳实践是什么? 有没有一种方法可以从数据库端进行控制(使用SQL),或者必须通过客户端来完成?

我考虑过为每个表包括一个布尔值'EditMode'列,并在编辑时将其简单地设置为true,并在允许另一个客户端访问该记录之前检查是否将其设置为true。

最佳实践是使用RowVersion和Optimistic锁定。

解释了乐观并发模式

如果先使用代码,则在POCO中包含一个字段。

public virtual byte[] RowVersion { get; set; }

EF会将Timestamp / RowVersion属性添加到表中。 在更新过程中将对其进行检查。 并在更改时由DB自动更新。

编辑:更好地解释。

EF寻找的是作为并发字段的属性,因此您实际上可以使用一个或多个字段来控制并发。

entity.Property(p => p.RowVersion).IsConcurrencyToken()

在执行更新或删除时,您会捕获定义的异常

catch (DbUpdateConcurrencyException ex)

EF将RowVersion视为并发令牌。 这是常用的方法。 由于SQLServer将自动为您更新此字段类型。 因此非常快速和容易。 但是您可以告诉EF属性是显式的并发令牌,并且有多个。

因此,EF应该在where子句中添加属性以进行更新和删除,以确保记录自访问以来没有更改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM