访问Web API方法时,EF代码首次并发

时间:2018-04-25 09:09:02

标签: c# .net asp.net-mvc api ef-code-first

我有这个案子。 FileController中的My Web Api方法同时由多个用户加入,其中一些尝试同时插入相同的记录。我已检查"如果记录存在则返回错误",但由于同时访问该方法,因此上下文尚未更新,因此该记录不存在于数据库并由两个/多个线程插入。

    [HttpPost]
    [Route("api/Files/Import")]
    public HttpResponseMessage Import(ImportFileRequest request)
    {
      using (var transactionMgr = managerTransactions.BeginTransaction()) //here BeginTransaction returns context.Database.BeginTransaction()
      {          

       if(!managerTransactions.FilesRepository.FileExists(request.FileName)) 
       {
          File file = new File();
          file.Name = request.FileName;
          //other properties
          managerTransactions.FilesRepository.Add(file);
          managerTransactions.SaveCahnges();
          transactionMgr.Commit();
      }
      else
      { 
         throw new Exception("File exists");  
      }
    }
   }

因此,在Save方法之前,两个线程已经进入方法并添加了文件。在第一个线程上执行save之前,第二个线程被占用,并且两个记录被添加到上下文中。然后执行保存并在数据库中添加两个文件。我无法使用TransactionScope,因为我们的客户不想安装必须安装的此服务。我尝试使用锁定对象,它似乎工作,但我不知道这是一个好主意

0 个答案:

没有答案