次の方法で共有


方法: ビューを事前に生成してクエリ パフォーマンスを向上させる

Entity Framework が、概念モデルに対してクエリを実行したり変更内容をデータ ソースに保存したりできるようになるには、データベースにアクセスするためのローカル クエリ ビューのセットを事前に生成しておく必要があります。ビューはアプリケーション ドメインごとにキャッシュされるメタデータの一部です。複数のオブジェクト コンテキストのインスタンスを同じアプリケーション ドメイン内に作成する場合、それらのインスタンスはビューを再生成するのではなく、キャッシュされたメタデータからビューを再利用します。ビューの生成は 1 つのクエリの実行におけるコスト全体のうち大半を占めますが、Entity Framework では、これらのビューを事前に生成し、コンパイル済みのプロジェクトに含めることができます。詳細については、「パフォーマンスに関する考慮事項 (Entity Framework)」を参照してください。

Entity Framework モデルとマッピング ファイルの生成および検証に加え、EDM ジェネレーター (EdmGen.exe) ツールでこれらのビューを事前に生成することもできます。このトピックでは、EdmGen.exe を使用して School モデルのビューを事前に生成し、ビュー ファイルをプロジェクトに追加する方法について説明します。School モデルは、Entity Framework クイック スタートで作成します。最後の手順では、モデル ファイルとマッピング ファイルを ASP.NET Web アプリケーションに組み込みリソースとして再度追加する方法を示します。

テキスト テンプレート変換ツールキットを使用して、事前にコンパイルされたビューを生成することもできます。詳細については、「ビューの生成に T4 テンプレートを使用する方法」を参照してください。

Bb896240.note(ja-jp,VS.100).gif注 :
このトピックの手順では、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 モデルのモデル ファイルとマッピング ファイルを出力ディレクトリに生成するには

  1. ソリューション エクスプローラーで、School.edmx ファイルをダブルクリックします。

    エンティティ デザイナーに School モデルが表示されます。

  2. モデル ブラウザーで、SchoolModel モデルを選択し、[メタデータ成果物の処理][出力ディレクトリにコピー] に変更します。

    これにより、モデル ファイルとマッピング ファイルが出力ディレクトリに生成されるようになります。

  3. ソリューションをビルドします。

    モデル ファイルとマッピング ファイルが出力ディレクトリに生成されます。

ビューの生成を Visual Basic プロジェクトに追加するには

  1. ソリューション エクスプローラーで、ビルド イベントを指定するプロジェクトを選択します。

  2. [プロジェクト] メニューで、[プロジェクトのプロパティ] をクリックします。

  3. [プロパティ] ページで、[コンパイル] タブをクリックします。

  4. [ビルド イベント] ボタンをクリックします。

  5. [ビルド イベント] ダイアログ ボックスで、次のビルド前のイベントを改行なしで追加します。

    "%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"
    
  6. [OK] をクリックします。

  7. [プロジェクトのプロパティ] ページを閉じます。

  8. ソリューションをビルドします。

    これでビュー ファイル School.Views.vb が生成されます。

  9. ソリューション エクスプローラーで、プロジェクト名を右クリックし、[既存項目の追加] を選択します。

  10. [既存項目の追加] ダイアログ ボックスで、プロジェクトのルート フォルダーに移動し、School.Views.vb ファイルを選択します。

  11. [追加] をクリックします。

  12. ソリューションをビルドします。

ビューの生成を C# プロジェクトに追加するには

  1. ソリューション エクスプローラーで、ビルド イベントを指定するプロジェクトを選択します。

  2. [プロジェクト] メニューの [プロパティ] をクリックします。

  3. [ビルド イベント] タブを選択します。

  4. [ビルド前に実行するコマンド ライン] ウィンドウで、次のビルド前のイベントを改行なしで追加します。

    "%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"
    
  5. ソリューションをビルドします。

    ビュー ファイル School.Views.cs が生成されます。

  6. ソリューション エクスプローラーで、プロジェクト名を右クリックし、[既存項目の追加] を選択します。

    [既存項目の追加] ダイアログ ボックスが表示されます。

  7. プロジェクトのルート フォルダーに移動し、School.Views.cs ファイルを選択します。

  8. [追加] をクリックします。

  9. ソリューションをビルドします。

マッピング ファイルとモデル ファイルを ASP.NET プロジェクトの組み込みリソースとして再度追加するには

  1. [プロジェクト] メニューの [既存項目の追加] をクリックします。

  2. プロジェクトの出力ディレクトリを参照し、School.csdl を選択して、[OK] をクリックします。

  3. ソリューション エクスプローラーで、追加したファイルを選択します。

  4. [プロパティ] で、[ビルド アクション][組み込まれたリソース] に設定します。

  5. School.ssdl ファイルと School.msl ファイルについて、手順 1. ~ 3. を繰り返します。

  6. ソリューション エクスプローラーで、App.config ファイルをダブルクリックし、次のいずれかの形式に基づいて connectionString 属性の Metadata パラメーターを変更します。

    • Metadata= res://<assemblyFullName>/<resourceName>;

    • Metadata= res://*/<resourceName>;

    • Metadata=res://*;

    resourceName にはプロジェクトの名前空間を含めることができます。詳細については、「接続文字列 (Entity Framework)」を参照してください。

参照

リファレンス

EDM ジェネレーター (EdmGen.exe)

その他のリソース

Entity Data Model Tools
Entity Framework 4 における事前コンパイル/事前生成されたビューでのパフォーマンスの分離