マルチスレッドエンティティフレームワークドリブンアプリケーションの設計にはいくつかの問題があり、いくつかのガイダンスが必要です。異なるスレッド上にエンティティを作成し、エンティティはコレクションに追加され、コレクションはさまざまなwpfコントロールにバインドされます。エンティティフレームワークとマルチスレッド
解決策1は単一のコンテキストを持ち、2つのスレッドが同時にアクセスしないように慎重にロックを使用します。これは実装が比較的簡単ですが、アプリケーションの継続中にコンテキストが生きている必要があります。単一のコンテキストインスタンスをこのように開いておくことは悪い考えですか?
解決策2は、必要に応じてコンテキストオブジェクトを作成し、オブジェクトを直ちに切り離してから、独自のコレクションに保持してから再インストールして更新することです。これは、オブジェクトがデタッチされたときにナビゲーションプロパティオブジェクトへの参照を失うので、重大な問題があります。また、2つのスレッドが1つのオブジェクトにアクセスしようとする可能性があり、両方がコンテキストにattach()しようとするという問題もあります。また、エンティティのナビゲーションプロパティにアクセスするたびに新しいコンテキストを提供する必要があります。
Q:2つのソリューションのいずれかが有効ですか?これに対処する方法を教えてください。
あなたはより良いアイデアを持っていますか? – Cocowalla
@Cocowallaは、OPが取り組んでいるより大きなシナリオを知らず、私はしません。彼の解決策の両方が痛ましい実装につながるので、私は彼に警告しています。おそらく、彼はまったく別の道を踏み、EFをシングルスレッドの方法で使用することができます。 – usr
もう1つの注意点:エンティティがデタッチされているときにエンティティに変更を加えることはできません。コンテキストが現在その変更を追跡していないためです。 SaveChanges()が後で呼び出されると、変更は保持されません。 – JoeCool