Первый параллелизм кода EF при доступе к методу веб-API - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть этот случай.Мой метод Web Api в FileController допускается несколькими пользователями одновременно, и некоторые из них пытаются вставить одну и ту же запись одновременно.У меня есть проверка «если запись существует, возвращаемая ошибка», но так как метод доступен одновременно, контекст еще не обновлен, поэтому запись не существует в базе данных и вставляется двумя / болеепотоки.

    [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");  
      }
    }
   }

Таким образом, перед сохранением метода два потока ввели метод и добавили файл. Второй поток, преобразованный перед сохранением, выполняется в первом потоке, и две записи добавляются в контекст.Затем выполняется сохранение и два файла добавляются в базу данных.Я не могу использовать TransactionScope, потому что наши клиенты не хотят устанавливать этот сервис, который должен быть установлен.Я пытался использовать объект блокировки, и он, кажется, работает, но я не знаю, хорошая ли это идея

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...