Entity Framework
Plantillas .t4 en Entidad-marco
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
}