asp.net - 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();
这是我在数据库中的结果
但是在进行数据库插入时,它会以相同的创建时间两次插入相同的数据,这种情况经常发生。为什么会这样?避免这些重复插入的最佳方法是什么?
解决方案
首先应该是
cr = context.Responses.FirstOrDefault(s => s.RegistrationId == registrationId );
此错误可能源自 UI。假设您正在按表单填写回复,并且有人按了两次提交,那么您将在 db 中有两行代表相同的回复。解决此问题的正确方法是让表单(通过 javascript 等)生成 guid,并在单击后立即禁用提交按钮。另一种方法是在数据库中声明结果列的组合是唯一的,因此定义上不能存在两条“相同”的行。
推荐阅读
- json - 以复杂对象为主体的 Dart HTTP Post
- python - id() 和 'is' 运算符应用于 Python 中的列表
- c++ - 如何使基类的方法使用派生类集的继承的受保护成员?C++
- r - R flexdashboard 上的多语言支持
- php - 令牌在google api php中过期
- java - 如何从地图集合中获取 Pojos 列表
- python - 如何通过 Twisted 的 Web 服务器正确地为 Django 应用程序提供服务?
- javascript - 如何遍历车把中的对象数组
- javascript - 当我添加花括号以便能够向上下文添加更多元素时,如何访问 GraphqlServer 上下文对象?
- google-cloud-platform - 从 Google GCP 项目凭据 API 密钥中检索信息