Buscar..


Agregando dinámicamente interfaces al modelo

Cuando se trabaja con un modelo existente que es bastante grande y se regenera con bastante frecuencia en los casos en que la abstracción es necesaria, puede ser costoso ir redecorando manualmente el modelo con interfaces. En tales casos, es posible que desee agregar algún comportamiento dinámico a la generación de modelos.

El siguiente ejemplo mostrará cómo agregar interfaces automáticamente en clases que tienen nombres de columna específicos:

En su modelo de ir a .tt archivo de modificar la EntityClassOpening método en el siguiente manera, esto añadirá IPolicyNumber interfaz en entidades que tienen POLICY_NO columna y IUniqueId en UNIQUE_ID

public string EntityClassOpening(EntityType entity)
{
    var stringsToMatch = new Dictionary<string,string> { { "POLICY_NO", "IPolicyNumber" }, { "UNIQUE_ID", "IUniqueId" } };
    return string.Format(
        CultureInfo.InvariantCulture,
        "{0} {1}partial class {2}{3}{4}",
        Accessibility.ForType(entity),
        _code.SpaceAfter(_code.AbstractOption(entity)),
        _code.Escape(entity),
        _code.StringBefore(" : ", _typeMapper.GetTypeName(entity.BaseType)),
        stringsToMatch.Any(o => entity.Properties.Any(n => n.Name == o.Key)) ? " : " + string.Join(", ", stringsToMatch.Join(entity.Properties, l => l.Key, r => r.Name, (l,r) =>  l.Value)) : string.Empty);
}

Este es un caso específico, pero muestra la capacidad de poder modificar plantillas .tt .

Adición de documentación XML a las clases de entidad

En todas las clases de modelo generadas no hay comentarios de documentación agregados por defecto. Si desea utilizar comentarios de la documentación XML para cada clases de entidad generados, se encontró dentro de esta parte .tt [ModelName] (ModelName es el nombre del archivo EDMX actual):

foreach (var entity in typeMapper.GetItemsToGenerate<EntityType>(itemCollection))
{
    fileManager.StartNewFile(entity.Name + ".cs");
    BeginNamespace(code); // used to write model namespace
#>
<#=codeStringGenerator.UsingDirectives(inHeader: false)#> 

Puede agregar los comentarios de la documentación XML antes de UsingDirectives línea UsingDirectives como se muestra en el siguiente ejemplo:

foreach (var entity in typeMapper.GetItemsToGenerate<EntityType>(itemCollection))
{
    fileManager.StartNewFile(entity.Name + ".cs");
    BeginNamespace(code);
#>
/// <summary>
/// <#=entity.Name#> model entity class.
/// </summary>
<#=codeStringGenerator.UsingDirectives(inHeader: false)#> 

El comentario de documentación generado debe incluir el nombre de la entidad como se indica a continuación.

/// <summary>
/// Example model entity class.
/// </summary>
public partial class Example
{
    // model contents
}


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow