2010-03-09 56 views
0

我有一个问题,使用UpdateModel(theModelToUpdate)导致并发问题。UpdateModel()导致行不被更新

基本上发生了什么事情,数据库中有一行包含大部分但不是该行所需的全部信息。剩下的所需信息是NULL。用户(使用列表框)然后将信息添加到该行,并创建新行(为列表框中的每个项目发送一个ajax命令。因此,控制器被称为非常快,因为用于获取项目)。

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

调试时,我注意到,因为控制器被称作如此之快,在的UpdateModel不叫马上就像我曾计划。由于这个原因,列表框中的几个项目会被跳过,并且我得到一个错误,提示该行无法更新。

我该如何解决这个问题?

回答

0

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

1

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

好吧,这一次我想你不应该使用UpdateModel如果你只是添加到行中的条目 - 你可以手动执行此操作。第二,在快速连续的同一项上调用控制器可能确实会导致数据库发生并发问题,因为它必须在某处获取锁。但是,我认为这将取决于您的数据库抽象,数据库类型和您使用的锁定机制。

我建议你写一个小的控制器动作,它只交互地添加一个条目,即每次用户实际做某事。这应该让你免受并发问题的困扰。

相关问题