1. ホーム
  2. entity-framework

[解決済み] Entity Framework: "ストアの更新、挿入、または削除ステートメントが予期しない行数 (0) に影響しました。" [クローズド]。

2022-03-16 02:03:50

質問

<余談
閉じた。 この質問には デバッギング詳細 . 現在、回答は受け付けておりません。

<パス

この質問を改善したいですか? 質問内容を更新して、それが オントロピ Stack Overflowのために。

クローズド 3年前 .

コミュニティは、この質問を再開するかどうかを検討した <スパン 4ヶ月前 を作成し、閉じたままにしました。

<ブロッククオート

元のクローズ理由が解決されていない

Entity Framework を使用して、グリッドコントロールにデータを入力しています。時々、更新を行うときに、以下のエラーが発生します。

ストアの更新、挿入、または削除ステートメントは、予期しない行数(0)に影響しました。エンティティが読み込まれた後に、エンティティが変更または削除された可能性があります。ObjectStateManager のエントリをリフレッシュしてください。

再現する方法がわかりません。でも、更新の間隔に関係があるのかもしれません。どなたかこれを見たことがある方、またはエラーメッセージが何を指しているのかご存知の方はいらっしゃいますか?

編集:残念ながら、私はこのプロジェクトから離れ、最終的に解決策を見つけたのか、他の開発者が解決したのか、あるいは私が回避したのか覚えていないので、ここで私が抱えていた問題を再現する自由はもうありません。したがって、いかなる回答も受け付けられません。

解決方法は?

それは、楽観的同時並行性という機能の副作用です。

Entity Frameworkでこれをどのようにオン/オフするかは100%わかりませんが、基本的には、あなたがデータベースからデータを取得したときと、あなたが変更を保存したときの間に、他の誰かがデータを変更した(つまり、あなたが保存しようとしたときに0行が実際に更新された)ことを伝えるものです。SQL用語で言うと update クエリの where 節には、行のすべてのフィールドの元の値が含まれており、もし0行が影響を受けたら、何かが間違っていることがわかります。

これは、基本的に、すべての更新に対して.NETが提供する小さな安全対策です。

もし一貫性があるなら、それはあなた自身のロジックの中で起こっている可能性が高いですが(例:選択と更新の間に別のメソッドで実際にデータを更新している)、単に2つのアプリケーション間の競合状態である可能性もあります。