これはよくある質問ですが、まだ SO ではないようです。インメモリ モデルにさまざまなデータ変更を許可するアプリケーションに Linq to SQL を使用しています。変更は非同期処理のためにキューに入れられます。だから、私は更新について心配していません(まだ)。データのさまざまな部分への変更は、Web ページのモーダル ポップアップを介して行うことができます。グリッドベースのものもあれば、単なる属性のものもあります。変更がポストバック サイクルに耐えられないという問題が発生しています。明らかに、すべての変更が行われ、ユーザーがページを送信するまで、データベースに何も保持したくありません。
これまでに選択したルートは次のとおりです。
- 遅延読み込みを無効にしました
- ルート オブジェクトの [シリアル化可能な] 部分クラスを作成します
- モノをセッションに入れて、onload イベントで取得します
これは原則として機能するようです。ただし、セッションからオブジェクトを取得した後、子のプロパティの一部を更新しようとすると
p.PhysicianSpecialties[0].physician_specialty_code =
ddlSpecialty.SelectedItem.Value;
次のエラーが表示されます。
Operation is not valid due to the current state of the object.
エラーは、生成された Linq セッター メソッドでのこのメソッド呼び出しによって発生します。
this.SendPropertyChanging();
他のプロパティは問題なく更新されます。
p.PhysicianNames[0].first_name = txtFirstName.Text.ToUpper();
エラーにはなりません。
私の質問: 私は根本的に間違った方向に進んでいますか? これを行うより良い方法はありますか?エラーの原因は何ですか?
更新: 例外は「System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException」です。私は何かに取り組んでいると思いますが、解決策はまだわかりません。