Ste*_*tes 5 c# entity-framework duplicates asp.net-web-api asp.net-web-api2
如果我使用实体框架作为MVC Web API的后端,一个控制器可能看起来像这样(快速模型):
public class PersonController : ApiController
{
[HttpPost]
public void AddPerson(Person val)
{
DbContext context = new DbContext();
if(!context.Persons.Any(x=>x.Email == val.Email))
{
context.Persons.Add(val)
context.SaveChanges();
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题在于,如果此操作被称为50,每隔几秒100次(可能不是一个好例子),则很可能可以使用相同的电子邮件地址添加多个条目.
如果val
参数是一个列表,Person
您可以检查changetracker
以查看是否有人在您之前添加了电子邮件地址,SaveChanges()
但是当您有来自不同来源的大量呼叫时,这不起作用.
你不能有一个静态DBContext
,因为它会抛出一个异常,说它很忙.
我想到的一个想法是相同的设置,但有一个静态方法,它返回一个实例(相同的实例),dbcontext
但lock()
在其上创建一种类似的队列,但这可能会影响性能,这不是一个好主意.
你怎么解决这个问题?
这个例子与我正在做的事情无关,只是简单地解释一下这个场景.我猜它也不一定具体.
谢谢
史蒂夫