实体框架实用工具 .ttinclude 文件

本主题概述了包含一些实用工具类的 .ttinclude 文件,这些实用工具类可帮助 ADO.NET 模板完成代码生成过程。 ADO.NET EntityObject 生成器模板ADO.NET 自跟踪实体生成器模板模板将使用此文件。 您不应修改 .ttinclude 文件。 但是,您可以在自己的模板中使用在此文件中定义的 Helper 函数。

.ttinclude 文件的 Visual Basic 版本和 C# 版本随 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 中定义的类

在文本模板中,Helper 函数包含在类功能块中。 类功能块用 <#+#> 标记引起来。 此 .ttinclude 文件中的代码使用 .NET Framework 类型。 因此,在文件的开头会包含适当的程序集和 .NET Framework 命名空间。 有关处理文本模板的更多信息,请参见生成项目(可能为英文网页)。

下面是一些在 EF.Utility.CS.ttinclude 文件中定义的公共类的列表,以及一些有关**“ADO.NET EntityObject 生成器”“ADO.NET 自跟踪实体生成器”**模板使用这些类的短小示例的列表。

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 - 包含用于访问代码生成所需的实体框架元数据的 Help 方法。

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

MetadataLoader - 负责从 .edmx 或 .csdl 文件中加载 EdmItemCollectionStoreItemCollectionStorageMappingItemCollection 对象。 下面的示例实例化 MetadataLoader 对象,并将元数据加载到 metadataWorkspace 对象中。

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

Accessibility - 一个静态类,可将实体框架中的代码生成批注的检索和转换包装为在代码生成中有用的格式。 请参见 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 自跟踪实体生成器模板