0

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

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

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

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

我该如何解决这个问题?

4

2 回答 2

1

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

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

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

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

于 2010-03-09T20:24:54.140 回答
0

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

于 2010-03-09T20:49:43.230 回答