方法: ビューを事前に生成してクエリ パフォーマンスを向上させる
Entity Framework が、概念モデルに対してクエリを実行したり変更内容をデータ ソースに保存したりできるようになるには、データベースにアクセスするためのローカル クエリ ビューのセットを事前に生成しておく必要があります。ビューはアプリケーション ドメインごとにキャッシュされるメタデータの一部です。複数のオブジェクト コンテキストのインスタンスを同じアプリケーション ドメイン内に作成する場合、それらのインスタンスはビューを再生成するのではなく、キャッシュされたメタデータからビューを再利用します。ビューの生成は 1 つのクエリの実行におけるコスト全体のうち大半を占めますが、Entity Framework では、これらのビューを事前に生成し、コンパイル済みのプロジェクトに含めることができます。詳細については、「パフォーマンスに関する考慮事項 (Entity Framework)」を参照してください。
Entity Framework モデルとマッピング ファイルの生成および検証に加え、EDM ジェネレーター (EdmGen.exe) ツールでこれらのビューを事前に生成することもできます。このトピックでは、EdmGen.exe を使用して School モデルのビューを事前に生成し、ビュー ファイルをプロジェクトに追加する方法について説明します。School モデルは、Entity Framework クイック スタートで作成します。最後の手順では、モデル ファイルとマッピング ファイルを ASP.NET Web アプリケーションに組み込みリソースとして再度追加する方法を示します。
テキスト テンプレート変換ツールキットを使用して、事前にコンパイルされたビューを生成することもできます。詳細については、「ビューの生成に T4 テンプレートを使用する方法」を参照してください。
注 : |
---|
このトピックの手順では、ASP.NET Web サイトではサポートされていない Visual Studio のビルド前およびビルド後のイベントを使用します。ASP.NET Web サイトで使用するビューを事前に生成するには、別のクラス ライブラリで .edmx ファイルを作成し、クラス ライブラリ プロジェクトの How to: Use a Model Defined in a Class Library の手順を使用し、ASP.NET Web サイト プロジェクトでクラス ライブラリ プロジェクトを参照する必要があります。代わりに、ASP.NET Web サイトではなく ASP.NET Web アプリケーション プロジェクトを使用することをお勧めします。その場合、このトピックの手順を使用して、事前に生成したビューを ASP.NET Web アプリケーションと同じプロジェクトに含めることができます。 |
事前に生成されたビューは、現在のバージョンのモデル ファイルとマッピング ファイルに対応することを確認するために、実行時に検証されます。
このトピックの手順では、School モデルを使用します。このモデルは、クイック スタート (Entity Framework) を完了することで生成できます。既にビルド プロセスでモデル ファイルとマッピング ファイルが出力ディレクトリに生成されている場合は、最初の手順を省略できます。
School モデルのモデル ファイルとマッピング ファイルを出力ディレクトリに生成するには
ソリューション エクスプローラーで、School.edmx ファイルをダブルクリックします。
エンティティ デザイナーに School モデルが表示されます。
モデル ブラウザーで、SchoolModel モデルを選択し、[メタデータ成果物の処理] を [出力ディレクトリにコピー] に変更します。
これにより、モデル ファイルとマッピング ファイルが出力ディレクトリに生成されるようになります。
ソリューションをビルドします。
モデル ファイルとマッピング ファイルが出力ディレクトリに生成されます。
ビューの生成を Visual Basic プロジェクトに追加するには
ソリューション エクスプローラーで、ビルド イベントを指定するプロジェクトを選択します。
[プロジェクト] メニューで、[プロジェクトのプロパティ] をクリックします。
[プロパティ] ページで、[コンパイル] タブをクリックします。
[ビルド イベント] ボタンをクリックします。
[ビルド イベント] ダイアログ ボックスで、次のビルド前のイベントを改行なしで追加します。
"%windir%\Microsoft.NET\Framework\v4.0.30319\EdmGen.exe" /nologo /language:VB /mode:ViewGeneration "/inssdl:$(TargetDir)School.ssdl" "/incsdl:$(TargetDir)School.csdl" "/inmsl:$(TargetDir)School.msl" "/outviews:$(ProjectDir)School.Views.vb"
[OK] をクリックします。
[プロジェクトのプロパティ] ページを閉じます。
ソリューションをビルドします。
これでビュー ファイル School.Views.vb が生成されます。
ソリューション エクスプローラーで、プロジェクト名を右クリックし、[既存項目の追加] を選択します。
[既存項目の追加] ダイアログ ボックスで、プロジェクトのルート フォルダーに移動し、School.Views.vb ファイルを選択します。
[追加] をクリックします。
ソリューションをビルドします。
ビューの生成を C# プロジェクトに追加するには
ソリューション エクスプローラーで、ビルド イベントを指定するプロジェクトを選択します。
[プロジェクト] メニューの [プロパティ] をクリックします。
[ビルド イベント] タブを選択します。
[ビルド前に実行するコマンド ライン] ウィンドウで、次のビルド前のイベントを改行なしで追加します。
"%windir%\Microsoft.NET\Framework\v4.0.30319\EdmGen.exe" /nologo /language:CSharp /mode:ViewGeneration "/inssdl:$(TargetDir)School.ssdl" "/incsdl:$(TargetDir)School.csdl" "/inmsl:$(TargetDir)School.msl" "/outviews:$(ProjectDir)School.Views.cs"
ソリューションをビルドします。
ビュー ファイル School.Views.cs が生成されます。
ソリューション エクスプローラーで、プロジェクト名を右クリックし、[既存項目の追加] を選択します。
[既存項目の追加] ダイアログ ボックスが表示されます。
プロジェクトのルート フォルダーに移動し、School.Views.cs ファイルを選択します。
[追加] をクリックします。
ソリューションをビルドします。
マッピング ファイルとモデル ファイルを ASP.NET プロジェクトの組み込みリソースとして再度追加するには
[プロジェクト] メニューの [既存項目の追加] をクリックします。
プロジェクトの出力ディレクトリを参照し、School.csdl を選択して、[OK] をクリックします。
ソリューション エクスプローラーで、追加したファイルを選択します。
[プロパティ] で、[ビルド アクション] を [組み込まれたリソース] に設定します。
School.ssdl ファイルと School.msl ファイルについて、手順 1. ~ 3. を繰り返します。
ソリューション エクスプローラーで、App.config ファイルをダブルクリックし、次のいずれかの形式に基づいて connectionString 属性の Metadata パラメーターを変更します。
Metadata=
res://<assemblyFullName>/<resourceName>;
Metadata=
res://*/<resourceName>;
Metadata=res://*;
resourceName
にはプロジェクトの名前空間を含めることができます。詳細については、「接続文字列 (Entity Framework)」を参照してください。
参照
リファレンス
その他のリソース
Entity Data Model Tools
Entity Framework 4 における事前コンパイル/事前生成されたビューでのパフォーマンスの分離