質問: 私はEntityFrameworkを使って最初のアプリケーションを作成しています。私はEntity Framework CoreとMVVMLightを使用しています。 私はDbContext子孫クラスを作成しました。私はいつこのDbContextをインスタンス化するのか知りたいです。 私の最初の考えは、各ビューに対して1つのインスタンスを作成することでした。 以下のシナリオを想像してみてください。 * 私はItemクラスを持っています * アイテムのリストを管理するItemsViewModelを作成します。このviewModelでは、DbContextのプロパティを追加します * ユーザーが項目をダブルクリックすると、ItemViewModelに関連付けられた詳細ビューに表示されます。このビューモデルには、私のDbContextのインスタンスもあります。 ユーザーが詳細ビューを終了すると、 * 彼が保存した場合は、リストのDbContextを更新します * 彼がキャンセルした場合、リストを更新する必要はありません これは正しいことですか?私はどこか1つだけDbContextのインスタンスを持つ必要があります読んだ。しかし、この場合、ディテール・ビューのすべての変更は、ディテール・ビューがキャンセルされた場合でもリスト・ビューに伝播されます。 聞いてみるとたくさんの
回答: WPFアプリケーションを開発しているので、フォームごとにコンテキストインスタンスを使用できます。 **ここはEFチームのものです:** > Windows Presentation Foundation(WPF)またはWindowsフォームを使用する場合は、フォームごとにコンテキストインスタンスを使用します。コンテキストによって提供される変更追跡機能を使用できます。 > > Dependency Injection(DI)を使用してリポジトリパターンを使用することをお勧めします。インスタンス化について心配する必要はなく、dbcontextを処分する必要はありません。それらは自動です。 したがって、EFコアを使用している**場合**は、DI APIとして**Autofac**を使用できます。 **良い記事:** **DbContextの使い方** Entity Framework、IoC Container、およびDependency Injectionを使用した汎用リポジトリパターンに基づいて、デカップリングされた、ユニットテスト可能なN層アーキテクチャを実装する方法について説明しているもう1つの良い記事です。この記事はMVC用です。しかし、あなたはこの記事を使ってこのパターンの良い知識を得ることができます。 **汎用リポジトリと作業単位のパターン、エンティティフレームワーク、オートファック**