Asp.net mvc 具有实体框架对象创建的MVC多线程服务器

Asp.net mvc 具有实体框架对象创建的MVC多线程服务器,asp.net-mvc,vb.net,entity-framework,asp.net-web-api,Asp.net Mvc,Vb.net,Entity Framework,Asp.net Web Api,我在API上有一个POST操作,该操作在实体上调用此函数: Public Async Function MarkAsSeenBy(db As TaplomaV2Entities, user As User, Optional markAsComplete As Boolean = False, Optional save As Boolean = True) As Threading.Tasks.Task Dim userContent = Me.UserContents.Si

我在API上有一个POST操作,该操作在实体上调用此函数:

    Public Async Function MarkAsSeenBy(db As TaplomaV2Entities, user As User, Optional markAsComplete As Boolean = False, Optional save As Boolean = True) As Threading.Tasks.Task

    Dim userContent = Me.UserContents.SingleOrDefault(Function(uc) uc.UserID = user.UserID)

    If userContent Is Nothing Then

        userContent = New UserContent() With {
            .UserID = user.UserID,
            .FirstViewed = DateTime.Now,
            .LastViewed = DateTime.Now,
            .CourseContentID = Me.CourseContentID,
            .ViewCount = 1
        }

        If markAsComplete Then
            userContent.TimeCompleted = DateTime.Now
        End If

        db.UserContents.Add(userContent)

    Else

        userContent.ViewCount += 1
        userContent.LastViewed = DateTime.Now

        If markAsComplete Then
            userContent.TimeCompleted = If(userContent.TimeCompleted, DateTime.Now)
        End If

        db.Entry(userContent).State = EntityState.Modified

    End If

    If save Then
        Await db.SaveChangesAsync()
    End If

End Function
本质上,它检查是否有与之关联的UserContent记录,如果没有,则创建一个,然后增加所看到的计数和时间,依此类推

如果端点被多次调用,这是否可能在数据库中创建多个记录

由于服务器是线程化的,我希望它在两个不同的线程上开始检查,两个线程都找不到记录,因此都添加了一个记录,这会生成两个记录


在基于DB条件创建新对象时,使用实体框架解决这种竞争条件的正确方法是什么?

始终从文档开始:我知道如何处理与现有实体的并发性,但我的案例涉及创建一个新实体。