Personnaliser la génération du code lié à l'EDM
Lorsqu'on utilise les designers LINQ To SQL ou EDM, le code .NET est généré pour nous. L'utilisation des partial methods permet de nous approprier les classes générées en rajoutant notre propre code.
Cependant, j'ai déjà entendu plusieurs fois la question suivante :
"Comment puis-je rajouter mes propres attributs sur les propriétés générées ?"
Ma réponse était la suivante : "Ce n'est pas possible (dans l'hypothèse où on ne prend pas le risque d'écrire dans le designer). Le plus simple consiste à encapsuler vos propriétés dans des propriétés écrites dans votre partie de la classe (classe partielle) et ainsi gérer vous-même vos attributs".
Cependant j'avais tord !
C'est possible !
Pour cela, il "suffit" de se créer son générateur de code et de préciser dans la fenêtre de propriétés du fichier (.edmx dans le cas d'EDM) que la génération ne se fera pas avec EntityModelCodeGenerator mais avec votre propre programme.
L'idée peut faire peur mais rassurer-vous, Sanjay Nagamangalam a déjà fait le travail pour nous.
Aussi je vous conseille vivement la lecture de ce post.
Grâce à cela, je peux par exemple définir dans mon csdl la propriété suivante :
<Property Name="CorpName" Type="String" MaxLength="250" xmlns:attr='http://tempuri.org/AttributeAnnotations' attr:MyCustomAnnotation='ConsoleApplication23.MyCustom' />
Le code généré est alors le suivant :
[global::System.Data.Objects.DataClasses.EdmScalarPropertyAttribute()]
[global::System.Runtime.Serialization.DataMemberAttribute()]
[ConsoleApplication23.MyCustom()]
public string CorpName
{
get
{
return this._CorpName;
}
set
{
this.OnCorpNameChanging(value);
this.ReportPropertyChanging("CorpName");
this._CorpName = global::System.Data.Objects.DataClasses.StructuralObject.SetValidValue(value, true, 250);
this.ReportPropertyChanged("CorpName");
this.OnCorpNameChanged();
}
}
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :