自适应网站好吗,监测网站定制,上海国外网站建设,网站建设+网络科技公司【悲观控制】
不推荐用#xff0c;EF Core 没有封装悲观并发控制的使用#xff0c;需要使用原生Sql来使用悲观并发控制
一般使用行锁、表锁等排他锁对资源进行锁定#xff0c;同时只有一个使用者操作被锁定的资源
拿sql server举例#xff0c;可以使用表所、或者行所解决…【悲观控制】
不推荐用EF Core 没有封装悲观并发控制的使用需要使用原生Sql来使用悲观并发控制
一般使用行锁、表锁等排他锁对资源进行锁定同时只有一个使用者操作被锁定的资源
拿sql server举例可以使用表所、或者行所解决并发问题
行锁只锁定特定的行减少等待时间提供并发性。
表锁锁定整个表适用于大量数据进行更新的情况。
查询数据时候加事务、sql中加锁
【乐观控制】
EF Core 内置的方法在执行数据时加上特殊的条件where 条件中加入旧值
update table set data1new where Id1 and data1old
当发生冲突时EF Core感知到影响行数为0EF Code会报错错误。
其中data1字段为并发修改令牌需要在定义表结构时将data属性用IsConcurrencyToken来申明
builder.Property(hh.data).IsConcurrencyToken()
RowVersion的用法
当需要修改多个字段做好并发控制时1个并发修改令牌无法满足需求时需要用到新的方法/
sql server数据库中可以用一个byte[]类型的属性做并发令牌属性用IsRowversion把整个属性申明为RowVersion类型在每次更新或新增数据时sql server会自动为这一属性列生成新值