Archivo .ttinclude de la utilidad Entity Framework

En este tema se proporciona información general sobre el archivo .ttinclude que contiene clases de utilidad que ayudan a las plantillas ADO.NET en el proceso de generación de código. Las plantillas Plantilla Generador de EntityObject de ADO.NET y Plantilla Generador de entidades de seguimiento propio de ADO.NET utilizan este archivo. No debe modificar el archivo .ttinclude. Sin embargo, puede utilizar las funciones auxiliares definidas en este archivo con sus propias plantillas.

Las versiones de Visual Basic y C# del archivo .ttinclude se instalan con Microsoft Visual Studio 2010, en el directorio <ruta de instalación de Visual Studio>\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\Templates\Includes.

Utilice la directiva Include para incluir el archivo en otras plantillas de texto. Al agregar la directiva Include a una plantilla de texto, el sistema combina las API públicas del archivo incluido con el código de la plantilla de texto. La directiva Include acepta un nombre de archivo con la ruta de acceso completa o solo el nombre del archivo incluido. Si solo especifica el nombre, el motor de transformación de plantillas de texto buscará el archivo en las ubicaciones conocidas. Para obtener más información, vea Cómo: Incluir archivos en plantillas de texto. En el siguiente ejemplo solo se especifica el nombre del archivo .ttinclude:

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

Clases definidas en .ttinclude

En las plantillas de texto, las funciones auxiliares están incluidas entre bloques de características de clase. Los bloques de características de clase se incluyen entre las etiquetas <#+ y #>. El código de este archivo .ttinclude usa tipos de .NET Framework. Por consiguiente, los ensamblados adecuados y los espacios de nombres de .NET Framework se incluyen al principio del archivo. Para obtener más información sobre cómo trabajar con plantillas de texto, vea Generar artefactos.

A continuación, figura la lista de algunas clases públicas definidas en el archivo EF.Utility.CS.ttinclude y unos ejemplos breves de cómo las plantillas Generador de EntityObject de ADO.NET y Generador de entidades de seguimiento propio de ADO.NET utilizan las clases.

CodeGenerationTools : ayuda a crear código fuente con un formato correcto y funcional.

Teniendo en cuenta que el nombre de entiy es Course, el siguiente código utiliza el objeto code del tipo CodeGenerationTools para generar el resultado public partial class Course: IObjectWithChangeTracker, INotifyPropertyChanged en el archivo de código fuente de destino.

<#=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: contiene métodos auxiliares que tienen acceso a los metadatos de Entity Framework necesarios para la generación de código.

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

MetadataLoader: responsable de cargar EdmItemCollection, StorageMappingItemCollection y objetos de StoreItemCollectiondesde un archivo .edmx o .csdl. El siguiente ejemplo inicializa el objeto MetadataLoader y carga los metadatos en el objeto metadataWorkspace.

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

Accessibility: una clase estática que encapsula la recuperación y traducción de las anotaciones de generación de código de los metadatos de Entity Framework en un formato que resulta útil para la generación de código. Vea el ejemplo incluido con la descripción de clase CodeGenerationTools.

CodeRegion: se encarga de crear regiones de código fuente. El siguiente código utiliza CodeRegion para generar el resultado de #region Primitive Properties en el archivo de código fuente de destino.

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

La región no se creará si se genera ningún código fuente para la región.

EntityFrameworkTemplateFileManager: se encarga de la división de varias secciones del código generado en archivos independientes. Las plantillas que escriben en varios archivos utilizan esta clase porque la tecnología de plantillas de texto no permite generar varios archivos. Si una plantilla de texto forma parte de un proyecto de Visual Studio, los archivos de código fuente generados se agregan como dependientes del archivo de plantilla. En el siguiente ejemplo se utiliza EntityFrameworkTemplateFileManager para generar definiciones de tipo de entidad en archivos independientes.

<#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: se encarga de recopilar juntos los parámetros de método y los parámetros que deben enviarse al método ExecuteFunction. En el siguiente ejemplo se recorre en bucle la colección de importaciones de función definida en el modelo conceptual y recopila los parámetros necesarios para cada función.

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

Vea también

Conceptos

Plantilla Generador de EntityObject de ADO.NET
Plantilla Generador de entidades de seguimiento propio de ADO.NET