【发布时间】:2020-05-26 13:16:02
【问题描述】:
我在 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();
这是我在数据库中的结果
但是在进行数据库插入时,它会以相同的创建时间两次插入相同的数据,这种情况经常发生。为什么会这样?避免这些重复插入的最佳方法是什么?
【问题讨论】:
-
也许 UI(或 BL)正在发送两个同时运行的添加消息?您是否考虑过使用 lock(..) 语句?
-
@LongChalk 有机会从 UI 中同时调用它。我怎么能阻止它?你能帮我提供一些锁的样本吗?
-
在 (Answer , RegistrationId) 上放置一个唯一的复合索引更简单(并且使用的资源少得多)。这几乎就是你想要的
标签: asp.net sql-server entity-framework api concurrency