ASP.NET Web API C#并发请求导致数据库重复

use*_*834 5 c# concurrency asynchronous asp.net-web-api2

我有一个WebApi异步控制器方法,该方法调用另一个异步方法,该方法首先进行空检查以查看记录是否存在,以及是否不将其添加到数据库中。问题是,如果我说同时有3个请求同时在各个线程中发生所有空检查(我假设),我将获得2个重复的条目。例如:

 public async void DoSomething()
{
    var record = {query that returns record or null}
    if (record == null)
    {
        AddNewRecordToDatabase();
    }   
}
Run Code Online (Sandbox Code Playgroud)

...这似乎是一件很普通的事情,也许我缺少了一些东西,但是如何防止这种情况发生呢?当然,我必须故意使它创建重复项,但是不允许这样做。

提前致谢,

背风处

Mor*_*ork 1

我通过调用存储过程来防止异步调用发生这种情况。然后,存储过程通过“重复键检测”或类似的 MSSQL 数据库查询进行检查。

这样,只需异步调用的顺序即可确定哪个是创建,哪个不是。