ビューを事前に生成してクエリ パフォーマンスを向上させる方法 (Entity Framework)
エンティティ データ モデル (EDM) に対してクエリを実行する前に、エンティティ フレームワーク では、データベースにアクセスするために使用する一連のビューを生成します。エンティティ フレームワーク では、クエリが初めて実行されるときにビューを生成し、ObjectContext のインスタンスの有効期間、これらのビューを保持します。ビューの生成は 1 つのクエリの実行におけるコスト全体のうち大半を占めますが、エンティティ フレームワーク では、これらのビューを事前に生成し、コンパイル済みのプロジェクトに含めることができます。EDM のマッピング ファイルとモデル ファイルの生成および検証に加え、EDM ジェネレータ (EdmGen.exe) ツールではこれらのビューを事前に生成することもできます。このトピックでは、EdmGen.exe を使用して School モデルのビューを事前に生成し、ビュー ファイルをプロジェクトに追加する方法について説明します。School モデルは、エンティティ フレームワーク クイック スタートで作成します。最後の手順では、モデル ファイルとマッピング ファイルを ASP.NET Web アプリケーションに組み込みリソースとして再度追加する方法を示します。
[!メモ]
このトピックの手順では、ASP.NET Web サイトではサポートされていない Visual Studio のビルド前およびビルド後のイベントを使用します。ASP.NET Web サイトで使用する EDM のビューを事前に生成するには、別のクラス ライブラリで EDM を作成し、クラス ライブラリ プロジェクトについて以下の手順を使用し、ASP.NET Web サイト プロジェクトでクラス ライブラリ プロジェクトを参照する必要があります。代わりに、ASP.NET Web サイトではなく ASP.NET Web アプリケーション プロジェクトを使用することをお勧めします。その場合、このトピックの手順を使用して、事前に生成したビューを ASP.NET Web アプリケーションと同じプロジェクトに含めることができます。
事前に生成したビューは、現在のバージョンの EDM に対応することを確認するために実行時に検証されます。この手順により、ビューが EDM に対応するようになります。既にビルド プロセスでモデル ファイルとマッピング ファイルが出力ディレクトリに生成されている場合は、最初の手順を省略できます。このトピックの手順では、School モデルを使用します。このモデルは、クイック スタート (Entity Framework) を完了することで生成できます。
[!メモ]
このトピックの手順を実行するためには、Visual Studio 2008 Service Pack 1 (SP1) が必要です。
School モデルのモデル ファイルとマッピング ファイルを出力ディレクトリに生成するには
ソリューション エクスプローラで、School.edmx ファイルをダブルクリックします。
エンティティ デザイナに School モデルが表示されます。
モデル ブラウザで、SchoolModel モデルを選択し、[メタデータ成果物の処理] を [出力ディレクトリにコピー] に変更します。
これにより、モデル ファイルとマッピング ファイルが出力ディレクトリに生成されるようになります。
ソリューションをビルドします。
モデル ファイルとマッピング ファイルが出力ディレクトリに生成されます。
ビューの生成を Visual Basic プロジェクトに追加するには
ソリューション エクスプローラで、ビルド イベントを指定するプロジェクトを選択します。
[プロジェクト] メニューで、[プロジェクトのプロパティ] をクリックします。
[プロパティ] ページで、[コンパイル] タブをクリックします。
[ビルド イベント] ボタンをクリックします。
[ビルド イベント] ダイアログ ボックスで、次のビルド前のイベントを改行なしで追加します。
"%windir%\Microsoft.NET\Framework\v3.5\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.cs が生成されます。
ソリューション エクスプローラで、プロジェクト名を右クリックし、[既存項目の追加] を選択します。
[既存項目の追加] ダイアログ ボックスで、プロジェクトのルート フォルダに移動し、School.Views.vb ファイルを選択します。
[追加] をクリックします。
ソリューションをビルドします。
ビューの生成を C# プロジェクトに追加するには
ソリューション エクスプローラで、ビルド イベントを指定するプロジェクトを選択します。
[プロジェクト] メニューの [プロパティ] をクリックします。
[ビルド イベント] タブを選択します。
[ビルド前に実行するコマンド ライン] ウィンドウで、次のビルド前のイベントを改行なしで追加します。
"%windir%\Microsoft.NET\Framework\v3.5\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)」を参照してください。