2

ExecuteCommand を使用して切り捨てを実行している Linq to SQL データベース テーブルがあります。この切り捨ての直後に、最初のレコードをテーブルに追加する必要がありますが、コードは「重複 ID」の問題で失敗し、切り捨てがすぐに行われなかったことを示しています。

強制的に切り捨てをすぐに実行する方法、または挿入を行う前にすべての変更がコミットされるまで待機する方法はありますか?

(追加:プログラムが失敗した後、再実行すると、テーブルが切り捨てられ、コアが期待どおりに動作して新しい行を挿入します)

4

2 に答える 2

2

Truncateすぐに実行されましたが、LINQ to SQL はユーザーが何をしたかを知りません。生の SQL を解釈できません。そのため、メモリにロードしたすべてのエンティティがデータベースになくなったことを認識できません。

データベースと DataContext のメモリ内状態が非同期になりました。

L2S ID マネージャーで ID が重複していたのは、特定のキーを持つ 1 つのエンティティのみが同じ DataContext に共存できるためです (これは完全に理にかなっています)。エラーを注意深く読むと、それが SqlException ではないことがわかります。

最も簡単な解決策は、切り捨てが実行された後に新しい DataContext を使用することです。より複雑なソリューションでは、読み込まれたエンティティの状態を更新する必要があります。仕組みがよくわからないので、自分で調べてください。

于 2012-09-11T16:48:03.513 に答える
0
  1. トランザクションを使用して、作業中のテーブルをロックします。
  2. これをストアド プロシージャで処理し、コードから SP を呼び出します。
于 2012-09-11T16:43:10.697 に答える