悲观并发 乐观并发 Entity Framework Core中的并发处理

悲观并发策略

A用户发起一个请求   开启了事务 查询到了某一条数据 进行修改     在A提交事务之前 其他人都不能对这条数据进行修改

这种策略最常见的一个问题就是死锁  比如A修改X记录,B修改Y记录,他们分别锁死了这两条记录,但是X和Y记录是相关的,A修改X的时候发现需要修改Y,但是Y又被锁定了,B修改Y的时候需要修改X,但是X也已经被锁定了,这样就产生了死锁问题

产生死锁的条件   

1.一定基于多线程 

2.锁内部用到了其他加锁的资源  

乐观并发策略

A用户发起一个请求   开启了事务 查询到了某一条数据 进行修改     在A提交事务之前 其他人也可以对这条数据进行修改      但是A提交事务的时候 会判断这条记录是否给修改 如果给修改过 就报错   

可以通过给实体加版本号实现    在提交事务的时候  会对比当前修改后的实体版本号跟数据库中实体的版本号  只有提交版本号大于数据库的记录版本号才会修改成功   否则就抛出异常

http://www.cnblogs.com/GuZhenYin/p/7761352.html

https://blog.csdn.net/qq_34337272/article/details/81072874

原文地址:https://www.cnblogs.com/jiangchengbiao/p/10454576.html