Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Matthieu MEZIL

I love .Net

Abonnements

Actualités

Locations of visitors to this page English blog
Locations of visitors to this blog
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. Smile 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 :

Publié mardi 19 février 2008 01:02 par Matthieu MEZIL

Classé sous : , , , ,

Commentaires

Pas de commentaires

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Power Tools 2008 CTP Juillet par Noham Choulant le il y a 15 minutes

- Disparition de variables de session PHP après une redirection ? par MadMatt le il y a 10 heures et 12 minutes

- [MOSS 2007] Publier ses formulaires InfoPath via feature par Adrien Siffermann le il y a 13 heures et 19 minutes

- Imagine Cup 2008 - Paris - Les résultats par TheSaib .NET blog le il y a 14 heures et 41 minutes

- L'Egypte accueille Imagine Cup 2009 par Code is poetry le il y a 14 heures et 53 minutes

- PowerShell : Mise en ligne de fonctions intéressantes pour SharePoint par Blog Technique de Romelard Fabrice le il y a 16 heures et 1 minutes

- Raccourcis clavier et CRM 4 par Clark, C#, MSCRM, SBS le il y a 20 heures et 6 minutes

- [Silverlight] Comment échanger des données entre une application Silverlight et une page ASP.NET via cookies ? par Thomas Lebrun le il y a 20 heures et 42 minutes

- SharePoint 2007 : Trouver les fichiers CheckOut dans une librairie de document par Philippe Sentenac [MVP SharePoint] le il y a 23 heures et 10 minutes

- [Open XML] Travailler avec Open XML : Linq To XML (Partie 2 - Requêtes/XPath) par Julien Chable le 07-08-2008, 02:05