Sök…


Dynamiskt lägga till gränssnitt till modellen

När man arbetar med befintlig modell som är ganska stor och regenereras ganska ofta i fall där abstraktion behövs kan det vara kostsamt att manuellt gå runt omredekorera modell med gränssnitt. I sådana fall kanske man vill lägga till lite dynamiskt beteende till modellgenerering.

Följande exempel visar hur automatiskt läggs till gränssnitt på klasser som har specifika kolumnnamn:

Gå till .tt filen i din modell modifiera metoden EntityClassOpening på följande sätt, detta kommer att lägga till IPolicyNumber gränssnittet på enheter som har POLICY_NO kolumn, och IUniqueIdUNIQUE_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);
}

Detta är ett specifikt fall men det visar att det är möjligt att ändra .tt mallar.

Lägga till XML-dokumentation i entitetsklasser

På alla genererade modellklasser finns det inga dokumentationskommentarer som läggs till som standard. Om du vill använda XML-dokumentationskommentarer för alla genererade entitetsklasser hittar du denna del inuti [modellnamn] .tt ( modellnamn är aktuellt EDMX-filnamn):

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

Du kan lägga till XML-dokumentationskommentarerna innan du UsingDirectives raden UsingDirectives som visas i exemplet nedan:

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)#> 

Den genererade dokumentationskommentaren ska innehålla enhetsnamn enligt nedan.

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


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow