0

最初にコードなしで EF 4.0 を使用しています。保存操作を非同期にする必要があります。問題は、ObjectContext がスレッドセーフではないことです。私のコンテキストには、WPF UI にバインドされた多くのオブジェクトがあります。私のエンティティを別のコンテキストに保存し、そのコンテキストを別のスレッドに安全に保存します。

変更を複製する簡単な方法はありますか?? キーワードが ObjectStateManager であることはわかっていますが、どうすればそれを行うことができますか?

4

1 に答える 1

1

これは不可能だと確信しています。は、のObjectStateManager変更を追跡および保存するための核心でありObjectContext、コンテキストと密接に絡み合っています。移植するだけの手術が必要です。より技術的に言えば、大量のリフレクションを適用せずにクローンを作成することはできません。これは、その状態のほとんどが内部で管理されているためです。そしてObjectContext.ObjectStateManager、セッターがありません。

問題の根本は、ビューごとにコンテキストを持つことです (少なくとも、1 つのグローバル コンテキストでさえありますか?)。ビューごとのコンテキストは、リッチ クライアント アプリケーションの実行可能なオプションですが、非同期処理が必要になるとパラメーターが変更されます。長いコンテキスト ライフタイムはもはやオプションではありません。

解決策は、エンティティ オブジェクトの代わりにビュー モデルを UI にバインド (切断) し、コンテキストを別のスレッド (つまり ) でインスタンス化してTask変更を保存することです。

EF 6 (現在はアルファ版) のもう 1 つの新機能は、組み込みの asyncです。私はまだそれを試したことはありませんが、有望に見えます。

于 2013-04-09T23:02:30.620 に答える