生成されるコードの概要 (Entity Data Model デザイナー)

ADO.NET Entity Framework には、.edmx ファイルの概念スキーマ定義言語 (CSDL) の内容に基づいてオブジェクト レイヤーを自動生成するツールが用意されています。 既定では、オブジェクト レイヤー コードを生成する ADO.NET Entity Data Model デザイナー (エンティティ デザイナー) で使用されるカスタム ツールは、EntityModelCodeGenerator です。 カスタム ツールについては、「単一ファイル ジェネレーターの実装 (英語)」を参照してください。 また、EdmGen.exe コマンド ライン ツールを使用することもできます。 詳細については、「How to: Use EdmGen.exe to Generate Object Model Files」を参照してください。 EntityModelCodeGenerator および EdmGen.exe コマンド ライン ツールでは、EntityClassGenerator クラスを使用してソース コードを生成します。

エンティティ デザイナーは、テキスト テンプレートを使用してカスタム オブジェクト レイヤー コードを生成することもできます。 詳細については、「方法: オブジェクトレイヤーのコード生成をカスタマイズする (Entity Data Model デザイナー)」を参照してください。

オブジェクト レイヤー コードの生成

オフジェクト レイヤー コードの生成に使用される既定のカスタム ツールは、次のような方法で起動できます。

  • ADO.NET Entity Data Model ウィザードを使用する。 詳細については、「Entity Data Model ウィザード」を参照してください。

  • モデルの更新ウィザードを使用する。 詳細については、「モデルの更新ウィザード (Entity Data Model ツール)」を参照してください。

  • .edmx ファイルの "Custom Tool" プロパティで指定されているツールを実行する。 それには、ソリューション エクスプローラーで .edmx ファイルを右クリックし、[カスタム ツールの実行] をクリックします。 .edmx ファイル プロパティの詳細については、「.edmx ファイルの概要 (Entity Framework)」を参照してください。

  • .edmx ファイルを保存する。

  • 変更した .edmx ファイルの外へタブ移動する。 この操作には、エンティティ デザイナーで開いている変更後の .edmx ファイルの外へタブ移動する操作も含まれます。

  • 変更した .edmx ファイルを含むプロジェクトをビルドする。

    Cc982041.note(ja-jp,VS.100).gif注 :
    上記の方法は、Visual Basic または C# のソース コード ファイルを <モデル名>.Designer.vb または <モデル名>.Designer.cs という名前で生成するか上書きします。このファイルはソリューション エクスプローラーの .edmx ノードに追加されます。

  • EdmGen.exe コマンド ライン ツールを使用する。 EdmGen.exe ツールを使用すると、Visual Basic または C# のソース コード ファイルが、コマンド ラインで指定した名前と場所で生成されます。

Cc982041.note(ja-jp,VS.100).gif注 :
オブジェクトレイヤー コードが既定のカスタム ツールまたは EdmGen.exe ツールで生成されると、既存のオブジェクトレイヤー コードは上書きされます。オブジェクトレイヤーのカスタマイズが上書きされるのを防ぐ方法については、「How to: Customize Generated Data Objects」を参照してください。

Cc982041.note(ja-jp,VS.100).gif注 :
概念モデルの関数インポートに基づいて生成されるメソッドは、対応するストアド プロシージャを ExecuteFunction メソッドで実行します。マージ オプション パラメーターを受け取らないオーバーロードを使用している場合は、AppendOnly オプションが使用されます。

Cc982041.note(ja-jp,VS.100).gif注 :
Visual Studio 2010 以降では、コード ジェネレーターによって、ObjectContextLazyLoadingEnabled プロパティが、概念モデルで定義されている annotation:LazyLoadingEnabled という annotation 属性の値に設定されます。既定では、annotation:LazyLoadingEnabled 値は true に設定されています。

生成されるコードの名前空間の特定

既定では、生成されるコードの名前空間は、プロジェクトのアプリケーション ページで指定されている名前空間になります。 .edmx ファイルの Custom Tool Namespace プロパティに名前空間を指定した場合は、指定した名前空間が使用されます。

プロジェクトの種類によっては、次に示す追加の考慮事項にも注意してください。

  • Visual Basic プロジェクトでは、Custom Tool Namespace プロパティに値が設定されておらず、プロジェクトの名前空間が空の場合、生成されるコードの名前空間は、.edmx ファイルで指定されている概念モデルの名前空間になります。 詳細については、「既定の名前空間の特定 (英語)」を参照してください。 カスタム ツールの名前空間を指定した場合は、Visual Studio コンパイラによって、指定した名前の前にプロジェクトのルート名前空間が追加されます。 指定した名前空間で型が定義されている場合でも、型を宣言する際は defaultnamespace.specifiednamespace をインポートする必要があります。 たとえば、プロジェクトのルート名前空間が ProjectDefaultNamespace で、[カスタム ツールの名前空間] プロパティに TestNamespace を指定した場合、TestNamespace 名前空間で定義されている型を宣言する際は、Import ProjectDefaultNamespace.TestNamespace を使用する必要があります。

  • C# プロジェクトでは、Custom Tool Namespace プロパティに名前空間が指定されていない場合、生成されるコードの名前空間は、(プロジェクトのアプリケーション ページで指定されている) プロジェクトの既定の名前空間に、.edmx ファイルの場所のフォルダー パスを組み合わせたものになります。 たとえば、プロジェクトのルート ディレクトリに対する .edmx ファイルの相対パスが Folder1/Folder2/Model.edmx である場合、生成されるコードの名前空間は ProjectDefaultNamespace.Folder1.Folder2 になります。

  • ASP.NET Website プロジェクトでは、.edmx ファイルが App_Code フォルダーのルートにある場合、生成されるコードの名前空間は .edmx ファイルの CSDL の内容で定義されている概念モデルの名前空間になります (詳細については、「Schema Element (CSDL)」を参照してください)。 .edmx ファイルが App_Code フォルダーのサブフォルダー内にある場合、生成されるコードの名前空間は App_Code フォルダーに対するフォルダー相対パスになります。 たとえば、.edmx ファイルが App_Code/Folder1/Folder2 にある場合、生成されるコードの名前空間は Folder1.Folder2 になります。

プロジェクト内の複数の .edmx ファイルの操作

プロジェクトに複数の .edmx ファイルが含まれていて、それらの .edmx ファイルが共通テーブル名を持つデータベースに基づいている場合、生成されるコードでクラス名が競合する可能性があります。 これらの競合が生じる状況と、競合の解決方法は、プロジェクトの種類によって以下のように異なります。

  • C# プロジェクトでは、複数の .edmx ファイルが同じプロジェクト フォルダー内にあり、それらの .edmx ファイルが共通テーブル名を持つデータベースに基づいている場合、生成されるコードでクラス名の競合が生じる可能性があります。 競合を解決するには、各 .edmx ファイルの "Custom Tool Namespace" プロパティに一意の値を指定するか、各 .edmx ファイルをプロジェクトの別々のサブフォルダーに配置します。

  • Visual Basic プロジェクトでは、複数の .edmx ファイルがプロジェクト内の任意の場所にあり、それらの .edmx ファイルが共通テーブル名を持つデータベースに基づいている場合、生成されるコードでクラス名の競合が生じる可能性があります。 競合を解決するには、各 .edmx ファイルの "Custom Tool Namespace" プロパティに一意の値を指定します。

  • ASP.NET Web サイト プロジェクトでは、複数の .edmx ファイルが App_Code フォルダーまたは App_Code ディレクトリ内の同じサブフォルダー内にあり、それらの .edmx ファイルが共通テーブル名を持つデータベースに基づいている場合、生成されるコードでクラス名の競合が生じる可能性があります。 競合を解決するには、各 .edmx ファイルを App_Code ディレクトリの別々のサブフォルダーに配置します。

いずれの場合も、競合を解決すると、各 .edmx ファイルに生成されたコードの名前空間が変わります。生成されたクラスを使用する既存のアプリケーション コードの更新が必要になる場合があります。

部分クラスの拡張

Entity Data Model ツールによって生成されたデータ クラスは、部分クラスに実装されます。 生成された部分データ クラスを拡張して、オブジェクトに機能を追加できます。 部分クラスを有効にすると、生成されたファイルが更新されるときに独自のカスタマイズ処理が失われることを心配することなく、これらのクラスを個別のソース ファイル内のカスタム メソッドとプロパティで拡張できます。 詳細については、「How to: Customize Generated Data Objects」を参照してください。

このセクションの内容

参照

概念

.edmx ファイルの概要 (Entity Framework)