次の方法で共有


ビューを事前に生成してクエリ パフォーマンスを向上させる方法 (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 モデルのモデル ファイルとマッピング ファイルを出力ディレクトリに生成するには

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    "%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"
    
  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 ツール