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

Dotnet Discussion :

Mapping des classes Entity Framework


Sujet :

Dotnet

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 189
    Points : 68
    Points
    68
    Par défaut Mapping des classes Entity Framework
    Bonjour à tous ,

    J'ai cherché sur internet comment mapper (OneToMany ,ManyToOne,...) les classes avec EntityFramework mais j'ai du mal à comprendre comment on sa fonctionne et comment faut s'y prendre sous hibernate en Java c'est trés simple mais là je dois avouer que je rencontre des difficultés sans doute car c'est la premiére fois que j'utilise ce framework .

    Si quelqu'un pourrait m'expliquer et éventuellement une doc intéressante , je suis preneur .

    Merci d'avance

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

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

    Avec entity il y a 2 modes de fonctionnement principaux: le model first et le database first.

    En Model first tu decris tes classes directement et entity ira generer le sql qui va bien pour creer les tables relations etc. Donc formule les mains de le calecon.


    Dans le second mode plus traditionnel, tu pars d'une base de donnees existantes, et entity va faire le reverse engeneering pour ecrire pour toi les classes representant tes tables/vues/contraines. En voici un exemple: https://msdn.microsoft.com/fr-ca/dat...or=-2147217396

    Oublie hibernate et les fichier xml, entity framework n'as pas grand chose a voir en termes d'implementation.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 189
    Points : 68
    Points
    68
    Par défaut
    ok merci mermich pour les infos , j'ai pu qu'a aller essayer çà .

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 189
    Points : 68
    Points
    68
    Par défaut
    J'ai une question , par exemple , j'ai une classe Habitant et Region , et que j'ai un Objet Region dans ma classe Habitant , si je fais une requete pour récuperer la liste d'habitant y va se débrouiller pour monter l'objet ou y'a un mapping ManyToOne équivalent à hibernate qui existe (meme si je sais que tu m'as d'oublié hibernate) ? car dans le lien tu m'a donné j'ai déjà réussi à faire des requetes comme dans l'exemple mais c'est pour récupérer l'objet Région que je sais pas trop

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 189
    Points : 68
    Points
    68
    Par défaut
    J'ai fais des test et ça ne fonctionne pas . le programme plante quand je demande de m'afficher lesUtilisateurs et uneRegion à mon avis mon mapping est pas bon car je me suis mal pris .

    J'ai essayé en suivant quelques exemple sur internet , j'ai crée une classe Region et Utilisateur codées comme ceci (aprés c'est peut-etre totalement faux mais j'aurai essayé^^) :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
     
    namespace Entity.Model
    {
        public class Utilisateur
        {
            public Utilisateur() {
     
            }
     
            //PrimaryKey
            public string idVisiteur { get; set; }
            public string nom { get; set; }
            public string prenom { get; set; }
            public string login { get; set; }
            public string mdp { get; set; }
            public string adresse { get; set; }
            public string cp { get; set; }
            public string ville { get; set; }
            public DateTime dateEmbauche { get; set; }
            public string telFixe { get; set; }
            public string telPort { get; set; }
            public string mail { get; set; }
     
     
            //Navigation properties
            public virtual Region uneRegion { get; set; }
        }
    }
    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
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
     
    namespace Entity.Model
    {
        public class Region
        {
            public Region() {
               this.utilisateurs = new List<Utilisateur>();
            }
     
            public string idRegion;
            public string libelleRegion;
     
            //navigation properties
            public virtual ICollection<Utilisateur> utilisateurs{get;set;}
        }
    }

    et voici mon programmme principale pour tester

    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
    26
    27
    namespace Entity
    {
        public class Program
        {
            static void Main(string[] args)
            {
                var dbContext = new gsbEntities();
     
                IQueryable<region> regions = from r  in dbContext.region
                                             select r;
     
                IQueryable<utilisateurs> lesUilisateurs = from u in dbContext.utilisateurs
                                             select u;
     
                foreach(var u in lesUilisateurs) {
                    Console.WriteLine(u.idUtilisateur);
                    Console.WriteLine(u.region.libelleRegion);
                }
     
                foreach (var r in regions) {
                    Console.WriteLine(r.idRegion);
                    Console.WriteLine(r.utilisateurs.ElementAt(0).idUtilisateur);
                }
     
            }
        }
    }

    Si quelqu'un m'aider en place correctement le mapping par rapport à la navigabilité se serait sympa car j'aimerais bien faire fonctionné

    Bonne soirée

  6. #6
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

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


    tu as creer un emdx en utilisant l'approche database first ou code first ?

    Si c'est database first dans ce cas tu ne devrai pas avoir a crees les classes toit memem mais a importer depuis la database (cf le lien que j'ai filer).
    Si c'est en code first dans ce cas, il faut faire une datamigration en suivant l'exemple avec ce lien : https://msdn.microsoft.com/fr-ca/dat...or=-2147217396

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 189
    Points : 68
    Points
    68
    Par défaut
    Citation Envoyé par mermich Voir le message
    Salut,


    tu as creer un emdx en utilisant l'approche database first ou code first ?

    Si c'est database first dans ce cas tu ne devrai pas avoir a crees les classes toit memem mais a importer depuis la database (cf le lien que j'ai filer).
    Si c'est en code first dans ce cas, il faut faire une datamigration en suivant l'exemple avec ce lien : https://msdn.microsoft.com/fr-ca/dat...or=-2147217396


    Ok mermich , j'ai pas vu que ca avait était créer dans le model . j'ai choisi le premier pour essayer mais je vais me renseigné un peu plus là dessus c'est juste que la je fais un peu bidouille pour m'entrainer.

    http://image.noelshack.com/fichiers/...58-capture.png


    Du coup si je veux faire une requete je fais la meme chose que j'ai fais mais avec en utilsant ces classes et lui se débrouille tout seul pour construire ce que je veux ?

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 189
    Points : 68
    Points
    68
    Par défaut
    Pourtant ce qui est bizarre , c'est que là ou je fais ma requete je fais reference à la bonne classe et le programme plante quand je demande un renseignement sur les utilisateurs

  9. #9
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2007
    Messages : 871
    Points : 1 498
    Points
    1 498
    Par défaut
    Si tu fais a partir de la base de donneses, en suivant les etapes tu vas importer tes tables. Cela va creer des classes.

    A partir de la si il y a les cles etrangeres entres les tables il va de lui-meme faire les liens entres les classes.

    Du coup pour faire ensuite une requetes en databse il te suffira de faire par exemples:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Shipping_Header header = dbcontext.Shipping_Header.FirstOrDefault(h => h.sh_HeaderID == shippingHeaderId);
    Le framework va de lui meme transformer le filtre FirstOrDefault(... en where cote database et ne va retourner qu'une seule ligne.

    Avec le mode 'database first' il faut bien comprendre que le emdx(le diagrame) est le model de reference et les classes sont generee a partir de ca, donc tu ne peux ni ne dois modifier ces classes).

    Donc oui fais les requetes comme celle que tu avais fait.

  10. #10
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 189
    Points : 68
    Points
    68
    Par défaut
    Ok merci pour tes renseignements , je comprends un peu mieux comment sa fonctionne je vais essayer ça et je te dirais si j'arrive à quelque chose mais y'a pas raison

  11. #11
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 189
    Points : 68
    Points
    68
    Par défaut
    J'ai essayé , j'ai regardé si la classe générer était correct tout est bon est quand j'essaye de récupérer le libellé de ma region sa plante avec cette erreur :

    http://www.noelshack.com/2016-15-1460471528-capture.png


    Je vais essayer avec une autre base pour voir

  12. #12
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 189
    Points : 68
    Points
    68
    Par défaut
    Je viens changer de base est sa plante aussi mais pas la même erreur .

    Pourtant dans la classe généré , il y'a pas de statique et tout est public
    Images attachées Images attachées  

Discussions similaires

  1. Réponses: 4
    Dernier message: 28/03/2013, 12h26
  2. Réponses: 3
    Dernier message: 08/04/2012, 23h02
  3. Réponses: 7
    Dernier message: 26/03/2012, 17h24
  4. Réponses: 2
    Dernier message: 18/02/2012, 20h46
  5. [JAXB] Comment utiliser JAXB pour le mapping des classes définies dans mon XSD ?
    Par yassirjanati dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 13/10/2011, 13h54

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