次の方法で共有


Entity Framework ユーティリティ .ttinclude ファイル

このトピックでは、ADO.NET テンプレートでのコード生成プロセスに役立つユーティリティ クラスを含む、.ttinclude ファイルの概要について説明します。 このファイルは、ADO.NET EntityObject ジェネレーター テンプレートおよび ADO.NET Self-Tracking Entity Generator テンプレートのテンプレートで使用されます。 .ttinclude ファイルは変更しないでください。 ただし、このファイルで定義されているヘルパー関数は、独自のテンプレート内で使用できます。

Visual Basic バージョンおよび C# バージョンの .ttinclude ファイルは、Microsoft Visual Studio 2010 と共に、<Visual Studio インストール パス>\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\Templates\Includes ディレクトリにインストールされています。

他のテキスト テンプレートにファイルをインクルードするには、Include ディレクティブを使用します。 テキスト テンプレートに Include ディレクティブを追加すると、インクルード ファイルのパブリック API がテキスト テンプレート内のコードにマージされます。 Include ディレクティブでは、完全なパスを含むファイル名、またはインクルード ファイルの名前のみが受け入れられます。 名前のみを指定した場合は、テキスト テンプレート変換エンジンによって、既知の場所でファイルが検索されます。 詳細については、「方法: テキスト テンプレートにファイルをインクルードする」を参照してください。 次の例では、.ttinclude ファイルの名前のみが指定されています。

<#@ include file="EF.Utility.CS.ttinclude"#>

.ttinclude で定義されているクラス

テキスト テンプレートでは、ヘルパー関数はクラス機能ブロックに囲まれます。 クラス機能ブロックは、<#+ タグと #> タグで囲まれています。 この .ttinclude ファイルのコードでは、.NET Framework 型が使用されます。 そのため、適切なアセンブリと .NET Framework 名前空間は、ファイルの先頭でインクルードされます。 テキスト テンプレートを使った作業の詳細については、「成果物の生成」を参照してください。

EF.Utility.CS.ttinclude ファイルで定義されているいくつかのパブリック クラスと、ADO.NET EntityObject ジェネレーター テンプレートおよび ADO.NET Self-Tracking Entity Generator テンプレートによるクラスの使用方法の簡単な例を次に示します。

CodeGenerationTools - 正しく書式設定された機能的なソース コードの作成を支援します。

entiy の名前が Course の場合、次のコードでは、CodeGenerationTools 型の code オブジェクトを使用して、対象のソース ファイルに public partial class Course: IObjectWithChangeTracker, INotifyPropertyChanged の出力を生成します。

<#=Accessibility.ForType(entity)#>
     <#=code.SpaceAfter(code.AbstractOption(entity))#>partial class
     <#=code.Escape(entity)#><#=code.StringBefore(" : ", 
    code.Escape(entity.BaseType))#><#=entity.BaseType == null ? "  : " : 
    ", "#>IObjectWithChangeTracker, INotifyPropertyChanged  

MetadataTools - コード生成に必要な Entity Framework メタデータにアクセスするヘルパー メソッドが含まれています。

<#MetadataTools ef = new MetadataTools(this);
if (ef.IsKey(edmProperty))
    
#>

MetadataLoader - .edmx ファイルまたは .csdl ファイルから、EdmItemCollection オブジェクト、StoreItemCollection オブジェクト、および StorageMappingItemCollection オブジェクトを読み込みます。 次の例では、MetadataLoader オブジェクトを初期化し、metadataWorkspace オブジェクトにメタデータを読み込みます。

<#MetadataLoader loader = new MetadataLoader(this);
string inputFile = @"SchoolModel.edmx";
MetadataWorkspace metadataWorkspace = null;
bool allMetadataLoaded =loader.TryLoadAllMetadata(inputFile, out metadataWorkspace);
#>

Accessibility - Entity Framework メタデータのコード生成の注釈の取得と変換を、コード生成に便利な形式にカプセル化する静的クラスです。 CodeGenerationTools クラスの説明に含まれる例を参照してください。

CodeRegion - ソース コード領域を作成します。 次のコードでは、CodeRegion を使用して、対象のソース ファイルに #region Primitive Properties の出力を生成します。

<#CodeRegion region = new CodeRegion(this, 1);
...  region.Begin("Primitive Properties");
#>  

領域に対してソース コードが生成されない場合は、領域が生成されません。

EntityFrameworkTemplateFileManager - 生成されたコードの各種のセクションを別々のファイルに分割します。 テキスト テンプレートのテクノロジでは複数のファイルの生成がサポートされていないため、複数のファイルに書き込むテンプレートでは、このクラスを使用します。 テキスト テンプレートが Visual Studio プロジェクトに含まれている場合、生成されたソース ファイルは、テンプレート ファイルの依存ファイルとして追加されます。 次の例では、EntityFrameworkTemplateFileManager を使用して、エンティティ型の定義を別々のファイルに出力します。

<#EntityFrameworkTemplateFileManager fileManager = EntityFrameworkTemplateFileManager.Create(this);#>
.  .  .  <#
// Emit Entity Types
foreach (EntityType entity in ItemCollection.GetItems<EntityType>().OrderBy(e => e.Name))
{
    fileManager.StartNewFile(entity.Name + ".cs");
    BeginNamespace(namespaceName, code);
    WriteEntityTypeSerializationInfo(entity, ItemCollection, code, ef);
#>  

FunctionImportParameter - メソッド パラメーターと、ExecuteFunction メソッドに送信する必要があるパラメーターを収集します。 次の例では、概念モデルで定義された関数インポートのコレクションをループして、各関数に必要なパラメーターを収集します。

<#
foreach (EdmFunction edmFunction in container.FunctionImports)
{
    IEnumerable<FunctionImportParameter> parameters = 
        FunctionImportParameter.Create(edmFunction.Parameters, code, ef);
.  .  .  }
#>  

参照

概念

ADO.NET EntityObject ジェネレーター テンプレート
ADO.NET Self-Tracking Entity Generator テンプレート