2009-05-05 19 views
1

これは頻繁に質問されますが、SOにはまだありません。私はLinq to SQLを使用して、インメモリモデルのさまざまなデータ変更を可能にするアプリケーションに使用しています。その変更は、非同期処理用のキューに入れられます。だから、私はまだ更新について心配していません。 データのさまざまな部分を変更するには、Webページのモーダルポップアップを使用します。グリッドベースのものもあれば、属性のみのものもあります。 私は、ポストバックサイクルで生き残っていない変更に関する問題に遭遇しています。明らかに、私はすべての変更が行われ、ユーザーがページを送信するまで、データベースに何かを保持したくない。Linq to SQL、Ajaxポストバック、ASP.NETのページ状態

私がこれまでに選択したルートは、次のとおりです。

  • I無効繰延ロード
  • 私はセッションにものを入れて、私のルートオブジェクト
  • ための[シリアル化可能]パーシャルクラスを作成し、 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'です。私はI am on to somethingだと思っていますが、まだ解決策はわかりません。

答えて

2

私はMSDNから解決策を得ました。問題はあります、私はそれを行うことができますより良いin this threadを説明することができます、一方は関連を一方的に変更することはできませんが、IDを変更するだけでなく、新しい子オブジェクトを割り当てることによって両端でそれを行う必要があります:

p.PhysicianSpecialties [0] .PhysicianSpecialtyLookup = db.PhysicianSpecialtyLookups.Single(c => (c.physician_specialty_code == ddlSpecialty.SelectedItem.Value));

0

データバインディングを使用している場合、どうすればよいでしょうか?私はドロップダウンの値を変更すると、このエラーをスローし始めたデータグリッドビューのドロップダウンリストがあります。これにより、関連付けを削除するか、データバインディングを使用しないようにする必要があると私は思います。

+0

ドロップダウンに何をバインドしていますか? – cdonner