Entity Framework
.t4 templates dans entity-framework
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
}