2016-12-01 5 views
4

C#WPFのLinqデータベースのDataContextを処理する最善の方法(プラクティス)は何ですか?すべてのviewModelで共有されるグローバルアプリケーション全体のDataContextを使用するか、すべてのトランザクションに対して独自のDataContextを開くことができますか?Linq DataContextのベストプラクティス

msdnStackOverflowの情報に基づいて、すべてのトランザクションに対して新しいDataContextを作成することをお勧めします。しかし、私の場合、あるビューモデルでデータを検索し、別のビューモデルに渡して値を変更したいとします。変更するビューモデルで新しいDataContextを作成すると、オブジェクトの状態が不一致になります。

enter image description here

よりよく理解するためのシーケンス図で「EditViewModel」ができない(最初のビューモデルにおける選択されたオブジェクトは、オブジェクトが古いのDataContextにバインドされているので、第二のビューモデルのDataContextの中に存在しません)オブジェクトが "LookupViewModelの" DataContextに関連しているため、渡された値を新しいDataContextで編集します。

私はDataContextも渡すことを考えました。しかし、LookupViewModelはeditViewModelを呼び出すときに時間制限がないため、DataContextが期限切れになる可能性があります。 (リフレッシュが不可欠です)。さらに、別のDataContexts値から異なるviewModelを1つのeditViewModelに渡すこともあります。

例外を受け取らずに別のDataContext内のDataContextからオブジェクトを辿る方法を教えてください。あるいは、アプリケーション設計全体を完全に再考するべきではありませんか?

+1

アボウいくつかのソリューションに入るDataContextスコープEntity Frameworkの場合ですが、linq http://mehdi.me/ambient-dbcontext-in-ef6/ – Mats391

答えて

1

あなたのViewModelはDataContextについて知ってはいけません。それはあまりにも低レベルです。

そして、それらを作成するのは間違いありません。 - まずはIOC \ DIパターンを見てください。

さらに、この低レベルのDB状態管理の詳細を抽象化するために、レイヤー(通常はDALと呼ばれます)を追加する必要があります。

また、アプリが大きい場合は、UnitOfWorkパターンのリポジトリを検討してください。締結するので、

、: あなたはこの3つのOOパターンになります。素敵なブログがあり

  1. Dependency injection

  2. DAL

  3. Repository (and maybe UnitOfWork)

+0

これらのキーワードをありがとうございます。それらを深く見に行く。 –

関連する問題