Recherche…


Ajouter dynamiquement des interfaces au modèle

Lorsque vous travaillez avec un modèle existant qui est assez gros et qui est régénéré assez souvent dans les cas où une abstraction est nécessaire, il peut être coûteux de contourner manuellement la redécoration du modèle avec des interfaces. Dans de tels cas, on peut vouloir ajouter un comportement dynamique à la génération de modèle.

L'exemple suivant montre comment ajouter automatiquement des interfaces sur des classes ayant des noms de colonnes spécifiques:

Dans votre modèle, allez dans le fichier .tt modifiez la méthode EntityClassOpening de la manière suivante, cela ajoutera l'interface IPolicyNumber sur les entités qui ont POLICY_NO colonne IUniqueId et IUniqueId sur 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);
}

Ceci est un cas spécifique mais il montre la capacité de pouvoir modifier les modèles .tt .

Ajout de documentation XML aux classes d'entités

Sur chaque classe de modèle générée, aucun commentaire de documentation n'est ajouté par défaut. Si vous souhaitez utiliser des commentaires de documentation XML pour chaque classe d'entité générée, recherchez cette partie dans [nom_modèle] .tt ( nom_modèle correspond au nom de fichier EDMX actuel):

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

Vous pouvez ajouter les commentaires de la documentation XML avant d' UsingDirectives ligne UsingDirectives , comme indiqué dans l'exemple ci-dessous:

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

Le commentaire de la documentation générée doit inclure le nom de l'entité, comme indiqué ci-dessous.

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


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow