首页 > 解决方案 > SQL Server 2012 中的并发插入

问题描述

我在 ASP.NET 中编写了一个使用 Entity Framework 6 的 api。

这是代码

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();

这是我在数据库中的结果

在此处输入图像描述

但是在进行数据库插入时,它会以相同的创建时间两次插入相同的数据,这种情况经常发生。为什么会这样?避免这些重复插入的最佳方法是什么?

标签: asp.netsql-serverentity-frameworkapiconcurrency

解决方案


首先应该是 cr = context.Responses.FirstOrDefault(s => s.RegistrationId == registrationId );

此错误可能源自 UI。假设您正在按表单填写回复,并且有人按了两次提交,那么您将在 db 中有两行代表相同的回复。解决此问题的正确方法是让表单(通过 javascript 等)生成 guid,并在单击后立即禁用提交按钮。另一种方法是在数据库中声明结果列的组合是唯一的,因此定义上不能存在两条“相同”的行。


推荐阅读