Salut à tous,
y'a un truc que je n'arrive pas à faire, et pourtant ça compile
Je me suis créé un petit système de validation de données côté serveur (WCF) pour sécuriser des saisies côté Silverlight. Côté serveur, j'ai un fichier DBML qui génère mes Data Classes.
On va se concentrer sur une propriété précise : le champ OperationName de la table Operation, voici le code que me génère VS 2008 :
OK, mais je souhaite rajouter un attribut que j'obtiendrai par Reflection.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 [Column(Storage="_OperationName", DbType="VarChar(50) NOT NULL", CanBeNull=false, UpdateCheck=UpdateCheck.Never)] [DataMember(Order=2)] public string OperationName { get { return this._OperationName; } set { if ((this._OperationName != value)) { this.OnOperationNameChanging(value); this.SendPropertyChanging(); this._OperationName = value; this.SendPropertyChanged("OperationName"); this.OnOperationNameChanged(); } } }
Cet attribut doit être dispo sur la propriété, pas sur la classe.
Donc : je crée une classe partial, avec le même namespace et une autre classe "MetadataType" :
En faisant mes tests, par exemple, rajouter une méthode dans la classe partial "Metadata" et en accédant aux propriétés de la classe de base, la compilation prouve bien que la syntaxe est bonne et qu'il est bien possible de surcharger les propriétés de la classe de base.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 using System.ComponentModel.DataAnnotations; namespace Gestion_Hosts_SvcLib.DAO { [MetadataType(typeof(OperationMetaData))] public partial class Operation { } public partial class OperationMetaData { [Validation_StringEmpty_Message("Le nom de l'opération ne peut être vide")] public string OperationName; [Validation_StringEmpty_Message("Le numéro de dossier ne peut être vide")] public string NumDossier; [Validation_ZeroSup_Message("Vous devez choisir un serveur web associé à l'opération")] public int ID_Server; [Validation_ZeroSup_Message("Vous devez spécifier le client de l'opération")] public int ID_Societe; } }
Mon problème donc est le suivant : quand je parcoure les attributs en runtime de la classe, seuls les attributs Column et DataMember ressortent, ceux que j'ai rajouté dans la partial ne sont pas trouvés : comment on fait svp ?
Voici le code que j'utilise pour rapatrier les attributs :
Merci à vousobject[] ValidationMsgAttribs = pi.GetCustomAttributes(typeof(Validation_StringEmpty_MessageAttribute), true);![]()
Partager