C# UpdateModel()导致不更新行

C# UpdateModel()导致不更新行,c#,asp.net-mvc,linq,updatemodel,C#,Asp.net Mvc,Linq,Updatemodel,我在使用UpdateModel(ModelUpdate)时遇到问题,导致并发问题 基本上,数据库中有一行包含该行所需的大部分信息,但不是全部信息。其余所需信息为空。然后,用户(使用列表框)将向此行添加信息,并创建新行(为列表框中的每个项目发送ajax命令。因此,由于用于获取项目的循环,控制器的调用非常快) 在我的控制器中,我首先检查用户要更新的列是否为空。如果是,则使用UpdateModel更新行。如果它们不为null(表示该行已完成),则使用剩余的列表框项创建新行 在调试时,我注意到由于控制器

我在使用UpdateModel(ModelUpdate)时遇到问题,导致并发问题

基本上,数据库中有一行包含该行所需的大部分信息,但不是全部信息。其余所需信息为空。然后,用户(使用列表框)将向此行添加信息,并创建新行(为列表框中的每个项目发送ajax命令。因此,由于用于获取项目的循环,控制器的调用非常快)

在我的控制器中,我首先检查用户要更新的列是否为空。如果是,则使用UpdateModel更新行。如果它们不为null(表示该行已完成),则使用剩余的列表框项创建新行

在调试时,我注意到由于控制器的调用速度太快,所以没有像我计划的那样立即调用UpdateModel。由于这个原因,listbox中的几个项目被跳过,我收到一个错误,说该行无法更新


如何解决这个问题?

不确定我是否正确:何时使用AJAX调用控制器?您说这种情况发生得非常快,所以我假设您在提交时多次调用控制器,而不是每次用户实际添加一行时。在“非常快”下,我理解每秒的多个操作

好吧,这一次,我认为如果您只是在一行中添加一个条目,就不应该使用
UpdateModel
——您可以手动执行

其次,快速连续地调用同一项上的控制器可能确实会导致数据库上的并发问题,因为它必须在某个地方获取锁。但是,我认为这将取决于您的数据库抽象、数据库类型和您使用的锁定机制


我建议您编写一个小的控制器操作,只以交互方式添加一个条目,即每次用户实际执行某项操作时。这应该可以避免并发问题。

我通过不使用UpdateModel更新行来解决这个问题。相反,我插入行,然后返回并删除缺少信息的行。也许不是最好的解决方案,但它解决了我的问题