2010-03-09 51 views
0

我有一個問題,使用UpdateModel(theModelToUpdate)導致併發問題。UpdateModel()導致行不被更新

基本上發生了什麼事情,數據庫中有一行包含大部分但不是該行所需的全部信息。剩下的所需信息是NULL。用戶(使用列表框)然後將信息添加到該行,並創建新行(爲列表框中的每個項目發送一個ajax命令。因此,控制器被稱爲非常快,因爲用於獲取項目)。

在我的控制器中,我首先檢查用戶將要更新的列是否爲NULL。如果是,我使用UpdateModel來更新行。如果它們不爲空(意味着該行已完成),那麼我使用剩餘的列表框項目創建新行。

調試時,我注意到,因爲控制器被稱作如此之快,在的UpdateModel不叫馬上就像我曾計劃。由於這個原因,列表框中的幾個項目會被跳過,並且我得到一個錯誤,提示該行無法更新。

我該如何解決這個問題?

回答

0

我解決了這個問題,沒有使用UpdateModel來更新該行。而是插入行,然後返回並刪除缺少信息的行。可能不是最好的解決方案,但它解決了我的問題。

1

不知道我是否正確:使用AJAX調用控制器的時候?你說這發生得非常快,所以我假設你在提交時多次調用控制器,而不是每次用戶實際添加一行。在「非常快」的情況下,我理解每秒多個操作。

好吧,這一次我想你不應該使用UpdateModel如果你只是添加到行中的條目 - 你可以手動執行此操作。第二,在快速連續的同一項上調用控制器可能確實會導致數據庫發生併發問題,因爲它必須在某處獲取鎖。但是,我認爲這將取決於您的數據庫抽象,數據庫類型和您使用的鎖定機制。

我建議你寫一個小的控制器動作,它只交互地添加一個條目,即每次用戶實際做某事。這應該讓你免受併發問題的困擾。

相關問題