0

UpdateModel(theModelToUpdate) の使用に問題があり、同時実行の問題が発生しています。

基本的に何が起こっているかというと、データベースには、その行に必要なすべての情報ではなくほとんどの情報を含む行があります。残りの必要な情報は NULL です。ユーザーは (リストボックスを使用して) この行に情報を追加し、新しい行を作成します (リストボックス内のすべての項目に対して ajax コマンドが送信されます。アイテム)。

私のコントローラーでは、まず、ユーザーが更新する列が NULL かどうかを確認します。そうであれば、UpdateModel を使用して行を更新します。それらが null でない場合 (行が complete であることを意味します)、残りのリストボックス項目で新しい行を作成します。

デバッグ中に、コントローラーが非常に迅速に呼び出されるため、UpdateModel が計画どおりにすぐに呼び出されないことに気付きました。このため、リストボックスのいくつかの項目がスキップされ、行を更新できないというエラーが表示されます。

どうすればこれを解決できますか?

4

2 に答える 2

1

私がこれを正しく理解したかどうかわからない:コントローラーはいつAJAXを使用して呼び出されますか?これは非常に高速に行われるとおっしゃっています。そのため、ユーザーが実際に行を追加するたびにではなく、送信時にコントローラーを複数回呼び出すと仮定します。「非常に高速」では、1秒あたりの複数の操作を理解しています。

UpdateModelさて、一度は、行にエントリを追加するだけの場合は使用すべきではないと思います。これは手動で行うことができます。

次に、同じアイテムでコントローラーをすばやく連続して呼び出すと、どこかでロックを取得する必要があるため、データベースで同時実行の問題が発生する可能性があります。ただし、これはデータベースの抽象化、データベースの種類、および使用するロックメカニズムによって異なると思います。

インタラクティブに、つまりユーザーが実際に何かをするたびに、1つのエントリのみを追加する小さなコントローラーアクションを作成することをお勧めします。これにより、同時実行の問題を回避できます。

于 2010-03-09T20:24:54.140 に答える
0

行の更新に UpdateModel を使用しないことで問題を解決しました。代わりに、行を挿入してから、戻って情報が欠落している行を削除します。おそらく最善の解決策ではありませんが、私の問題は解決しました。

于 2010-03-09T20:49:43.230 に答える