EF Code 并发控制

【悲观控制】

不推荐用,EF Core 没有封装悲观并发控制的使用,需要使用原生Sql来使用悲观并发控制

一般使用行锁、表锁等排他锁对资源进行锁定,同时只有一个使用者操作被锁定的资源

拿sql server举例,可以使用表所、或者行所解决并发问题,

行锁:只锁定特定的行,减少等待时间,提供并发性。

表锁:锁定整个表,适用于大量数据进行更新的情况。

查询数据时候加事务、sql中加锁

【乐观控制】

EF Core 内置的方法,在执行数据时加上特殊的条件(where 条件中加入旧值)

update table set data1='new' where Id=1 and data1='old'

当发生冲突时,EF Core感知到影响行数为0,EF Code会报错错误。

其中data1字段为并发修改令牌,需要在定义表结构时,将data属性用IsConcurrencyToken来申明

builder.Property(h=>h.data).IsConcurrencyToken()

RowVersion的用法:

当需要修改多个字段做好并发控制时,1个并发修改令牌无法满足需求时,需要用到新的方法/

sql server数据库中可以用一个byte[]类型的属性做并发令牌属性,用IsRowversion把整个属性申明为RowVersion类型,在每次更新或新增数据时,sql server会自动为这一属性列生成新值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值