IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Framework .NET Discussion :

[LINQ to SQL] Comment récupérer mes attributs perso sur propriétés de classe ?


Sujet :

Framework .NET

  1. #1
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 32
    Par défaut [LINQ to SQL] Comment récupérer mes attributs perso sur propriétés de classe ?
    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 :

    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();
    		}
    	}
    }
    OK, mais je souhaite rajouter un attribut que j'obtiendrai par Reflection.
    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" :

    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;
        }
     
    }
    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.

    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 :

    object[] ValidationMsgAttribs = pi.GetCustomAttributes(typeof(Validation_StringEmpty_MessageAttribute), true);
    Merci à vous

  2. #2
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Par défaut
    Citation Envoyé par BruceWayne Voir le message
    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 ?
    Au hasard tu n'utiliserais pas le type de la classe de base lorsque tu parcours les attribut ? Pour que tu puisses obtenir les attributs de ta classe OperationMetaData
    il faut que tu ai une variable de type OperationMetaData et pas OperationMeta

  3. #3
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 32
    Par défaut
    Merci, en effet, il suffit de récupérer les champs de la classe Metadata, ça fonctionne bien


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 21/09/2009, 03h03
  2. [Linq to Sql] Comment récupérer les noms de champs ?
    Par seb.49 dans le forum Framework .NET
    Réponses: 3
    Dernier message: 01/10/2008, 08h51
  3. Réponses: 7
    Dernier message: 06/03/2006, 12h19
  4. [SQL] comment récupérer le contenu de cases à cocher
    Par Viau dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 31/01/2006, 14h56
  5. comment récupérer mes doublons
    Par cakeke dans le forum Oracle
    Réponses: 2
    Dernier message: 01/12/2005, 15h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo