萝岗做网站seo刷排名软件
【悲观控制】
不推荐用,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会自动为这一属性列生成新值