Я работаю над проектом ASP.NET Web API 2 с .NET Framework 4.6.2. Когда я отправляю из Postman два одновременных запроса с одинаковыми параметрами, в базе данных обновляется только одна запись, хотя их должно быть две. Я приложил скриншоты запросов Postman и таблицу после ответа.
Вот код, который я использую:
private HttpResponseMessage CallGameNew(RequestDto requestDto) { // Код опущен для краткости. List gameBankResult = null; //Запрос базы данных GameBank gameBankResult = _unitOfWork.GameBankRepository.GetGames(g => g.productCode == requestDto.productCode && g.referenceId == Guid.Empty); if (gameBankResult != null && gameBankResult.Count() >= requestDto.quantity) { вар k = requestDto.quantity - 1; for (var i = k; i >= 0; --i) { gameBankResult.clientTrxRef = gameRequest.clientTrxRef; gameBankResult.referenceId = gameRequest.referenceId; gameBankResult.requestDateTime = DateTime.Now; gameBankResult.responseDateTime = DateTime.Now; } //***** ОБНОВЛЕНИЕ GameBank ***** _unitOfWork.GameBankRepository.Update(gameBankResult[k]); если (requestDto.quantity == 1) { //Код опущен для краткости. } } _unitOfWork.Сохранить(); обратный ответ; } Скриншоты:
Похоже, это изменение работает. Интересно, какие у вас есть предложения? Есть ли области, требующие улучшения?
//Обновить GameBank пытаться { _unitOfWork.GameBankRepository.Update(gameBankResult[k]); _unitOfWork.Сохранить(); } улов (DbUpdateConcurrencyException) { // Обновляем и повторяем попытку gameBankResult[k] = _unitOfWork.GameBankRepository.GetByID(gameBankResult[k].GameBankID); _unitOfWork.GameBankRepository.Update(gameBankResult[k]); _unitOfWork.Сохранить(); } Отправьте 2 одновременных запроса от Postman, и я ожидал увидеть 2 обновленные записи в базе данных.
Изменить1:
Фабио был прав, а как насчет этого кода?
//Обновить GameBank пытаться { _unitOfWork.GameBankRepository.Update(gameBankResult[k]); _unitOfWork.Сохранить(); } улов (DbUpdateConcurrencyException) { // Обновляем и повторяем попытку gameBankResult[k] = _unitOfWork.GameBankRepository.GetByID(gameBankResult[k].GameBankID); _unitOfWork.GameBankRepository.Update(gameBankResult[k]); _unitOfWork.Сохранить(); пытаться { _unitOfWork.GameBankRepository.Update(gameBankResult[k]); _unitOfWork.Сохранить(); } улов (DbUpdateConcurrencyException ex) { интервал повторных попыток = 0; Bool isConcurrencyHandled = ложь; while (retryCount < 3 && !isConcurrencyHandled) { пытаться { gameBankResult[k] = _unitOfWork.GameBankRepository.GetByID(gameBankResult[k].GameBankID); _unitOfWork.GameBankRepository.Update(gameBankResult[k]); _unitOfWork.Сохранить(); isConcurrencyHandled = правда; } улов (DbUpdateConcurrencyException) { повторитьСчетчик++; } } если (!isConcurrencyHandled) { // Обработка ошибки параллелизма } } }
Я работаю над проектом ASP.NET Web API 2 с .NET Framework 4.6.2. Когда я отправляю из Postman два одновременных запроса с одинаковыми параметрами, в базе данных обновляется только одна запись, хотя их должно быть две. Я приложил скриншоты запросов Postman и таблицу после ответа.
Вот код, который я использую:
private HttpResponseMessage CallGameNew(RequestDto requestDto) { // Код опущен для краткости. List gameBankResult = null; //Запрос базы данных GameBank gameBankResult = _unitOfWork.GameBankRepository.GetGames(g => g.productCode == requestDto.productCode && g.referenceId == Guid.Empty); if (gameBankResult != null && gameBankResult.Count() >= requestDto.quantity) { вар k = requestDto.quantity - 1; for (var i = k; i >= 0; --i) { gameBankResult[i].clientTrxRef = gameRequest.clientTrxRef; gameBankResult[i].referenceId = gameRequest.referenceId; gameBankResult[i].requestDateTime = DateTime.Now; gameBankResult[i].responseDateTime = DateTime.Now; } //***** ОБНОВЛЕНИЕ GameBank ***** _unitOfWork.GameBankRepository.Update(gameBankResult[k]); если (requestDto.quantity == 1) { //Код опущен для краткости. } } _unitOfWork.Сохранить(); обратный ответ; } Скриншоты: [img]https://i.stack.imgur.com/6GCqN.jpg[/img]
[img]https://i.stack.imgur.com/iP1a9.jpg[/img]
Похоже, это изменение работает. Интересно, какие у вас есть предложения? Есть ли области, требующие улучшения?
//Обновить GameBank пытаться { _unitOfWork.GameBankRepository.Update(gameBankResult[k]); _unitOfWork.Сохранить(); } улов (DbUpdateConcurrencyException) { // Обновляем и повторяем попытку gameBankResult[k] = _unitOfWork.GameBankRepository.GetByID(gameBankResult[k].GameBankID); _unitOfWork.GameBankRepository.Update(gameBankResult[k]); _unitOfWork.Сохранить(); } Отправьте 2 одновременных запроса от Postman, и я ожидал увидеть 2 обновленные записи в базе данных.
[b]Изменить1:[/b]
Фабио был прав, а как насчет этого кода? //Обновить GameBank пытаться { _unitOfWork.GameBankRepository.Update(gameBankResult[k]); _unitOfWork.Сохранить(); } улов (DbUpdateConcurrencyException) { // Обновляем и повторяем попытку gameBankResult[k] = _unitOfWork.GameBankRepository.GetByID(gameBankResult[k].GameBankID); _unitOfWork.GameBankRepository.Update(gameBankResult[k]); _unitOfWork.Сохранить(); пытаться { _unitOfWork.GameBankRepository.Update(gameBankResult[k]); _unitOfWork.Сохранить(); } улов (DbUpdateConcurrencyException ex) { интервал повторных попыток = 0; Bool isConcurrencyHandled = ложь; while (retryCount < 3 && !isConcurrencyHandled) { пытаться { gameBankResult[k] = _unitOfWork.GameBankRepository.GetByID(gameBankResult[k].GameBankID); _unitOfWork.GameBankRepository.Update(gameBankResult[k]); _unitOfWork.Сохранить(); isConcurrencyHandled = правда; } улов (DbUpdateConcurrencyException) { повторитьСчетчик++; } } если (!isConcurrencyHandled) { // Обработка ошибки параллелизма } } }
Я работаю над проектом ASP.NET Web API 2 с .NET Framework 4.6.2. Когда я отправляю из Postman два одновременных запроса с одинаковыми параметрами, в базе данных обновляется только одна запись, хотя их должно быть две. Я приложил скриншоты запросов...
У меня есть веб-приложение на базе Джакарты, развернутое в Glassfish 7.0.16. В настоящее время я внедряю Jakarta Security с ролью пользователя из БД. Это работает нормально, пока клиентская сторона не выполнит несколько запросов ajax одновременно,...
У меня есть веб-приложение на базе Джакарты, развернутое в Glassfish 7.0.16. В настоящее время я внедряю Jakarta Security с ролью пользователя из БД. Это работает нормально, пока клиентская сторона не выполнит несколько запросов ajax одновременно,...
В чем разница между веб-приложением ASP.NET Core (MVC) и веб-приложением ASP.NET (платформа .NET)?
Когда использовать эти шаблоны?
image
Мое требование: мне просто нужно создать простую страницу входа, которая будет принимать имя пользователя и...
Я создал два веб -сервиса: первый - это ядро ASP .NET для обслуживания RESTFULL HTTP; Второй - ядро ASP .NET с MVC. Первый имеет API, которые хранят несколько данных в базе данных. У второго есть представления, которые называют API первой...