Szukaj…


Dynamiczne dodawanie interfejsów do modelu

Podczas pracy z istniejącym modelem, który jest dość duży i jest często regenerowany w przypadkach, w których potrzebna jest abstrakcja, ręczne obejście remontowania modelu za pomocą interfejsów może być kosztowne. W takich przypadkach można dodać dynamiczne zachowanie do generowania modelu.

Poniższy przykład pokaże, jak automatycznie dodawać interfejsy do klas, które mają określone nazwy kolumn:

W swoim modelu przejdź do pliku .tt zmodyfikuj metodę EntityClassOpening w następujący sposób, to doda interfejs IPolicyNumber do encji, które mają kolumnę POLICY_NO , i IUniqueId na 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);
}

Jest to jeden konkretny przypadek, ale pokazuje moc modyfikowania szablonów .tt .

Dodawanie dokumentacji XML do klas jednostek

Do każdej wygenerowanej klasy modelu domyślnie nie są dodawane komentarze dokumentacji. Jeśli chcesz korzystać z komentarzy dokumentacji XML dla każdego generowanych klas encji, znaleźć tę część wnętrza [MODELNAME] .tt (MODELNAME jest obecna nazwa pliku EDMX):

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

Możesz dodać komentarze do dokumentacji XML przed UsingDirectives , jak pokazano w przykładzie poniżej:

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

Wygenerowany komentarz do dokumentacji powinien zawierać nazwę jednostki, jak podano poniżej.

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


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow