Параллельная вставка в SQL Server 2012 - PullRequest
0 голосов
/ 11 февраля 2020

Я написал API в ASP. NET, который использует Entity Framework 6.

Вот код

cr = context.Responses.FirstOrDefault(s => s.RegistrationId ==registrationId);

if (cr == null)
{
    cr = new Responses()
                {
                    Answer = answer,
                    RegistrationId = registrationId,
                    CreationTime = DateTime.Now
                     };
    context.Responses.Add(cr);
}
else
{
    cr.Answer = answer;
}
context.SaveChanges();

Это мой результат в базе данных

enter image description here

Но при выполнении вставки базы данных она вставляет одни и те же данные дважды с одинаковым временем создания, что часто происходит. Почему это так? Каков наилучший способ избежать этих дублирующих вставок?

1 Ответ

0 голосов
/ 11 февраля 2020

в первую очередь это должно быть cr = context.Responses.FirstOrDefault(s => s.RegistrationId == registrationId );

Возможно, эта ошибка происходит из пользовательского интерфейса. Предположим, что вы заполняете ответы формой, и кто-то нажимает на отправку дважды, тогда в базе данных будет две строки, представляющие один и тот же ответ. Правильный способ решения этой проблемы заключается в том, чтобы форма (через javascript и т. Д.) Генерировала guid и сразу же отключала кнопку отправки после щелчка. Другой способ - объявить в базе данных, что комбинации столбцов результата являются уникальными, поэтому по определению не может существовать две «одинаковые» строки.

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