Мы работаем над приложением MVC. В этом приложении у нас есть платежный модуль. После того, как пользователь начнет повторную подписку, приложение получит два ответа от PayPal для завершения платежа, с тем же TransactionId. Один через «Успешный URL», а другой - через прослушиватель IPN. Мы используем таблицу «Транзакция», чтобы сохранить детали транзакции в PayPal. Приложение проверяет наличие «Транзакции» в базе данных, получая ответ от Paypal. Таким образом, чистый результат - это первый ответ от PayPal, который будет вставляться в таблицу «Транзакция».Проблема с внедрением параллелизма Entity Framework
Недавно у нас возникли проблемы, связанные с параллелизмом работы с инфраструктурой Entity Frame. Если появится два ответа parellay, обе эти записи вставляют в таблицу транзакций с одним и тем же «идентификатором trnsction», даже если у нас есть код для проверки существования транзакции. Как предотвратить эту дублируемую вставку? Обе вставки происходят из разных CONTEXT.
var ipnDetail = unitOfWork.TransactionDetailRepository.GetTransaction(transactionNumber);
if (ipnDetail == null)
{
}
Мы используем тот же код для обоих вставок. Единственное отличие состоит в том, что мы вызываем из разных контекстов EF.
Также можно отметить первую вставленную запись, имеющую больше времени, чем второй вставленной записи. Фактически мы устанавливаем дату из кода. Как решить эту проблему параллелизма?
Мы попытались использовать «ObjectContext.Refresh» для решения. Но это нам не помогает.
((IObjectContextAdapter)context).ObjectContext.Refresh(System.Data.Objects.RefreshMode.StoreWins, ((IObjectContextAdapter)context).ObjectContext.ObjectStateManager.GetObjectStateEntries(EntityState.Added));
Любая помощь будет заметна. Обратите внимание, что приложение находится в рабочей среде.
С наилучшими пожеланиями,
Ranish
Не могли бы вы поместить уникальный индекс в столбец транзакций в своем бэкэнде? Это предотвратит это. – ojf
Спасибо. если я устанавливаю «уникальный индекс» в стороне sql, я думаю, что это предотвращает дублирование транзакций. Но проблема заключается в том, что мы должны знать ipnDetails == null или нет, исходя из того, что мы можем выполнять другую операцию. – Ranish
- это ваш автоконкурс id?потому что это объяснит это ... первый вызов будет успешным, второй попытается вставить идентификатор и сбой с параллелизмом. – DevilSuichiro