UpdateModel()导致行不被更新

时间:2010-03-09 20:08:55

标签: c# asp.net-mvc linq updatemodel

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

基本上发生了什么,数据库中有一行包含该行所需的大部分但不是全部信息。其余所需信息为NULL。用户(使用列表框)然后将信息添加到该行,以及创建新行(为列表框中的每个项发送一个ajax命令。因此,由于用于获取项目)。

在我的控制器中,我首先检查用户将要更新的列是否为NULL。如果是,我使用UpdateModel来更新行。如果它们不为null(意味着行已完成),那么我使用剩余的列表框项创建新行。

调试时,我注意到由于控制器被如此快速地调用,因此不会像我原先计划的那样立即调用UpdateModel。由于这个原因导致列表框中的几个项目被跳过,我收到一条错误消息,指出该行无法更新。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

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

好吧,我认为如果你只是在行中添加一个条目就不应该使用UpdateModel - 你可以手动执行此操作。

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

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

答案 1 :(得分:0)

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