加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

sql – 在行使实体框架时锁定记录以举办编辑的最佳实践

发布时间:2021-01-17 23:03:21 所属栏目:编程 来源:网络整理
导读:不太确定怎样说出这个题目,但在这里.我正在开拓一个项目,个中多个客户端应用措施通过WCF处事会见一个数据源.它也许不相干,但WCF处事正在操作实体框架来会见此数据源.每当客户端查询记录举办编辑时,我想阻止其他客户端编辑统一记录,直到第一个客户端完成更新.

不太确定怎样说出这个题目,但在这里.我正在开拓一个项目,个中多个客户端应用措施通过WCF处事会见一个数据源.它也许不相干,但WCF处事正在操作实体框架来会见此数据源.每当客户端查询记录举办编辑时,我想阻止其他客户端编辑统一记录,直到第一个客户端完成更新.

假如我错了,请更正我,但我信托这也称为同步和异步数据会见.

我的题目是,实现此成果的行业最佳实践是什么.有没有步伐从数据库端(行使SQL)节制它,照旧必需通过客户端完成?

我思量过为每个表包括一个布尔“EditMode”列,并在编辑时简朴地将其配置为true,并在应承其他客户端会见该记录之前搜查是否配置为true.

办理要领

最佳做法是行使RowVersion和乐观锁定.

Optimistic Concurrency Patterns表明.

假如起首行使代码,则在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子句添加属性以举办更新和删除确保记录自会见后没有变革.

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读