如果我使用實體框架作爲後端的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();
}
}
}
的問題是,如果這操作被稱爲50次,每隔幾秒100次(可能不是一個好例子),多個條目可能被添加到同一個電子郵件地址的可能性很高。
如果val
參數是的Person
列表,你可以檢查changetracker
,看是否已經添加了電子郵件地址的人之前,你SaveChanges()
但這並不當你有很多不同來源的呼叫的工作。
你不能有一個靜態的DBContext
因爲它會拋出一個異常,說它很忙。
一個想法我沒想到的是相同的設置,但是具有返回dbcontext
的實例(同一個實例),但一個靜態方法上有一個lock()
創造一種像隊列,但是這可能會影響性能的ISN這不是一個好主意。
你如何解決這個問題?
該示例與我正在做的事情無關,但僅僅是一些簡單的解釋場景。它不一定是特定的,我猜。
感謝
史蒂夫
是什麼讓一個新人變得獨特?是否允許多個使用相同電子郵件地址的人員?如果否,那麼電子郵件屬性的唯一限制肯定會有所幫助。你也應該考慮爲什麼這個操作經常被重複的信息調用。 – elolos
我不只是需要防止重複,我可能需要拉和現有的鏈接,可以創建0.00001ms之前,並將其鏈接到一個新的記錄。這個例子顯然不是最好的。 –