本主题概述了随 Visual Studio 2010 提供的“ADO.NET EntityObject 生成器”模板,还演示了如何自定义文本模板。 EntityObject 派生的实体类(对象层代码)。  

<模型名称>.tt 模板输出一个源文件 <模型名称>.cs(或.vb),该源文件出现在解决方案资源管理器中的 <模型名称>.tt 的下面。

<模型名称>.tt 文件代码概述

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

<#@ template language="VB" debug="false" hostspecific="true"#> <#@ include file="EF.Utility.VB.ttinclude"#> <#@ output extension = ".vb" #> 
  1. <#@ template language="C#" debug="false" hostspecific="true"#>
  2. <#@ include file="EF.Utility.CS.ttinclude"#>
  3. <#@ output extension=".cs"#>

例如,此类型确定是否将 Camel 大小写格式用于字段名称,或确定是否将 AddTo 方法添加到生成代码的类型化对象上下文类中。

<# Dim userSettings As UserSettings = New UserSettings With _ { _ .SourceCsdlPath = "SchoolModel.edmx", _ .ReferenceCsdlPaths = new string () {}, _ .FullyQualifySystemTypes = True, _ .CreateContextAddToMethods = True, _ .CamelCaseFields = False _ } ApplyUserSettings(userSettings) #> 
  1. <#
  2. UserSettings userSettings =
  3. new UserSettings
  4. {
  5. SourceCsdlPath = @"SchoolModel.edmx",
  6. ReferenceCsdlPaths = new string[] {},
  7. FullyQualifySystemTypes = true,
  8. CreateContextAddToMethods = true,
  9. CamelCaseFields = false,
  10. };
  11. ApplyUserSettings(userSettings);
  12. #>

还将初始化一些局部变量。

<# Dim loader As New MetadataLoader(Me) Dim ef As New MetadataTools(Me) Dim region As New CodeRegion(Me) Dim code As New CodeGenerationTools(Me) With {.FullyQualifySystemTypes = userSettings.FullyQualifySystemTypes, .CamelCaseFields = userSettings.CamelCaseFields} ItemCollection = loader.CreateEdmItemCollection(SourceCsdlPath, ReferenceCsdlPaths.ToArray()) ModelNamespace = loader.GetModelNamespace(SourceCsdlPath) Dim namespaceName As String = code.VsNamespaceSuggestion() UpdateObjectNamespaceMap(namespaceName) #> 
  1. <#
  2. MetadataLoader loader = new MetadataLoader(this);
  3. MetadataTools ef = new MetadataTools(this);
  4. CodeRegion region = new CodeRegion(this);
  5. CodeGenerationTools code = new CodeGenerationTools(this){FullyQualifySystemTypes = userSettings.FullyQualifySystemTypes, CamelCaseFields = userSettings.CamelCaseFields};
  6. ItemCollection = loader.CreateEdmItemCollection(SourceCsdlPath, ReferenceCsdlPaths.ToArray());
  7. ModelNamespace = loader.GetModelNamespace(SourceCsdlPath);
  8. string namespaceName = code.VsNamespaceSuggestion();
  9. UpdateObjectNamespaceMap(namespaceName);
  10. #>

以下是写出到 <模型名称>.cs 或 <模型名称>.vb 文件的代码的说明:

  1. EDM 关系元数据。
  2. <#=Accessibility.ForType(container)#> Partial Class <#=code.Escape(container)#> Inherits ObjectContext 
  1. <#=Accessibility.ForType(container)#> partial class <#=code.Escape(container)#> : ObjectContext
Public Partial Class SchoolEntities Inherits ObjectContext 

相关文章: