Asp.net mvc 具有实体框架对象创建的MVC多线程服务器
我在API上有一个POST操作,该操作在实体上调用此函数: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
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条件创建新对象时,使用实体框架解决这种竞争条件的正确方法是什么?始终从文档开始:我知道如何处理与现有实体的并发性,但我的案例涉及创建一个新实体。