Entity Framework
.t4 templates in entity-framework
Ricerca…
Aggiunta dinamica di interfacce al modello
Quando si lavora con un modello esistente che è abbastanza grande e viene rigenerato abbastanza spesso nei casi in cui è necessaria l'astrazione, potrebbe essere costoso andare in giro a ridisegnare il modello con le interfacce manualmente. In questi casi si potrebbe voler aggiungere un comportamento dinamico alla generazione del modello.
L'esempio seguente mostrerà come aggiungere automaticamente interfacce su classi che hanno nomi di colonne specifici:
Nel vostro modello di andare a .tt
file di modificare EntityClassOpening
metodo nella seguente maniera, questo aggiungerà IPolicyNumber
interfaccia su entità che hanno POLICY_NO
colonna e IUniqueId
su 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);
}
Questo è un caso specifico ma mostra un potere di essere in grado di modificare i modelli .tt
.
Aggiunta della documentazione XML alle classi di entità
Su ogni classe di modello generata non ci sono commenti di documentazione aggiunti di default. Se si desidera utilizzare i commenti della documentazione XML per ogni classe di entità generata, trovare questa parte all'interno di [nome modello] .tt (nome modello è il nome file EDMX corrente):
foreach (var entity in typeMapper.GetItemsToGenerate<EntityType>(itemCollection))
{
fileManager.StartNewFile(entity.Name + ".cs");
BeginNamespace(code); // used to write model namespace
#>
<#=codeStringGenerator.UsingDirectives(inHeader: false)#>
È possibile aggiungere i commenti della documentazione XML prima UsingDirectives
riga UsingDirectives
come mostrato nell'esempio seguente:
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)#>
Il commento della documentazione generata deve includere il nome dell'entità come indicato di seguito.
/// <summary>
/// Example model entity class.
/// </summary>
public partial class Example
{
// model contents
}