首页 > 解决方案 > 具有隔离级别但无法正常工作的实体框架 BeginTransaction

问题描述

我正在使用带有EF6的 mysql 连接器来构建数据库。
处理并发更新的方法发生了。

  1. 客户端 A更新行

  2. 客户端 B进来更新同一行

  3. 客户端 B需要等待客户端 A提交他的更新。代码:

         using (myEntities db = new myEntities ())
         {
             db.Database.Connection.Open();
             try
             {
                 using (var scope = db .Database.BeginTransaction(System.Data.IsolationLevel.Serializable))
                 {
                     {  
                         var test = db.customer_table.Where(x => x.id == 38).FirstOrDefault();
                         test.bank_holder_name = "CLIENT A";
                         db.SaveChanges();
                         scope.Commit();
                     }
                 }
             }
             catch (Exception ex)
             {
                 throw;
             }
         }
    

在调试时,当客户端 A 执行此 SaveChanges() 步骤时,我故意暂停。但是客户端 B 可以在没有任何等待的情况下完成他的更新。这里有人遇到这个问题吗?

P/S:我做了很多关于实体框架并发问题的阅读和试​​验,比如;
a) 使用 row_version 进行乐观锁定(如果时间戳不够唯一以捕获并发,则无法正常工作)
b) 事务范围(仍与上述结果相同)

这里有人知道在实体框架中停止并发吗?提前致谢!

标签: mysqlentity-frameworkconcurrencyisolationpessimistic-locking

解决方案


推荐阅读