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 テンプレート