假设我有一个带有“UpdateRecord(int recordID)”方法的控制器。这个方法只能更新给定记录一次(通过设置适当的值来记录在数据库中,让我们说它的列是“IsLock”)。为了检查它,我做了:
所以现在我想知道如果我对这个方法(具有相同的recordID)执行两个AJAX请求,那么会发生什么。 ASP.NET会在第一次请求执行后执行第二个请求吗?或者它会同时执行吗?
为了澄清更多信息,请告诉我这种情况是否可行:
如果可以,请告诉mi我如何保护我的方法以防止这种情况发生?
答案 0 :(得分:2)
首先,它不仅由您的应用程序定义,还由IIS设置定义。我认为this article会有所帮助。
要回答ADO.net部分 - 有几种类型的数据并发控制,您可以阅读有关差异的here (Data Concurrency in ADO.NET)并使用适合您的情况。
在您使用锁的情况下,您将从
更改查询update T set IsLock = 1 where recordID = 555
到
update T set IsLock = 1 where recordID = 555 and IsLock = 0
并检查cmd.ExecuteNonQuery()
的返回值为1或0。
如果返回0,则记录未更新,锁定由其他用户等设置。
您可能还想在表格中添加LockerID
字段,以便查询
update T set IsLock = 1, LockerID = @userID where recordID = @recordID and IsLock = 0
因此,当打开记录时,您将首先执行锁定查询,如果成功,您将加载记录并显示编辑模式,否则显示只读模式。