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

C# Discussion :

Fonction générique pour conversion bdd/c#


Sujet :

C#

  1. #1
    Membre Expert
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Par défaut Fonction générique pour conversion bdd/c#
    Bonjour,

    j'ai une fonction qui permet de faire des conversions entre type bdd (EF) et type C#

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    public static T ConvertTo<T>(this DbDataRecord record)
          {
             T item = Activator.CreateInstance<T>();
             for (int f = 0; f < record.FieldCount; f++)
             {
                PropertyInfo p = item.GetType().GetProperty(record.GetName(f));
                if (p != null & & p.PropertyType == record.GetFieldType(f))
                {
                   p.SetValue((item, record.GetValue(f), null);
                }
             }
     
             return item;
          }

    Seulement elle sort une exception si jamais mon record a une valeur nulle.
    J'ai donc modifiée la ligne
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    p.SetValue((item, record.GetValue(f), null);
    en
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    p.SetValue((item, record.GetValue(f) == DBNull.Value ? "" : record.GetValue(f), null);

    Bien entendu cela ne fonctionne que pour les String.
    J'aurais aimé savoir s'il y avait moyen de faire quelque chose d'un brin plus générique, prenant en compte le type de p.

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Regarde du côté de Dapper ou Massive (les deux sont sur GitHub), ça a l'air de correspondre fortement à ce que tu essaie de faire.
    Ce sont des "framework" de micro-mapping.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2007
    Messages : 871
    Par défaut
    Salut,

    Pourquoi veux-tu affecter un valeur par défaut à tes propriétés ?

    Imagine un lien sur une autre entité, c'est fonctionnellement juste qu'elle soit nulle plutôt que de pointer sur une nouvelle instance.

  4. #4
    Membre Expert
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Par défaut
    Nous utilisons une requête personnalisée pour un cas précis et je n'aurais donc pas de lien fonctionnel.

    Je veux une valeur par défaut car un Int32 ne peut pas être nul. Je pourrais donc utiliser un Int32? mais je ne sais pas pourquoi, si ma propriété est nullable, mon mapping Linq ne se fait pas correctement et j'obtiens une valeur nulle même si la base me retourne une donnée.

    Massive ne donne pas de valeur par défaut donc cela ne me convient pas.
    J'étudie Dapper mais c'est beaucoup plus complexe

  5. #5
    Membre actif
    Homme Profil pro
    Architecte C#
    Inscrit en
    Février 2003
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte C#

    Informations forums :
    Inscription : Février 2003
    Messages : 78
    Par défaut
    Si je résume bien, si la valeur du record est nulle, on ne doit pas l'assigner... pourquoi pas ca dans ce cas :

    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
     
    public static T ConvertTo<T>(this DbDataRecord record)
            {
                T item = Activator.CreateInstance<T>();
                for (int f = 0; f < record.FieldCount; f++)
                {
                    PropertyInfo propertyInfo = typeof (T).GetProperty(record.GetName(f));
                    if (propertyInfo != null
                        && propertyInfo.PropertyType.IsAssignableFrom(record.GetFieldType(f)))
                    {
                        if (!record.IsDBNull(f))
                        {
                            propertyInfo.SetValue(item, record.GetValue(f), null);
                        }
                    }
                }
     
                return item;
            }

  6. #6
    Membre Expert
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Par défaut
    Ah ben oui tiens !
    Merci beaucoup ça devrait me convenir

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 17/09/2013, 11h59
  2. Fonction générique pour valider les champs d'un formulaire quelconque
    Par dark_vidor dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 26/01/2009, 01h34
  3. [AJAX] [vos avis] fonction "générique" pour les requetes
    Par gorgonite dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 18/07/2007, 19h40
  4. fonction générique pour get set et change
    Par tretsois dans le forum C++
    Réponses: 9
    Dernier message: 18/02/2007, 18h28
  5. [VB.Net] fonctions génériques pour le new
    Par ohcysp dans le forum Windows Forms
    Réponses: 3
    Dernier message: 11/09/2006, 11h47

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