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

Entity Framework Discussion :

[VS2013] Model-first et associations [Débutant]


Sujet :

Entity Framework

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Points : 265
    Points
    265
    Par défaut [VS2013] Model-first et associations
    Bonjour,
    j'ai un peu de mal à appréhender les associations dans EF.
    Dans Access par exemple, une relation relie une colonne d'une table à une autre colonne d'une autre table.
    Ici, dans EF, l'association crée une relation entre une Entité et une autre et là, je m'y perds: prenons l'exemple simple d'un modèle destiné à gérer une vidéothèque.
    Soient 2 entités:

    Film
    Id
    Acteurs
    Realisateur
    Producteur

    Personne

    Id
    Nom
    Prenom

    Dans Access, on relierait Realisateur à la table Personne, puis Producteur à Personne, etc.

    Mais dans EF, on associe Film à Personne ; mais comment lui dire que Realisateur, Producteur, Acteurs (dans ce dernier cas, relation de plusieurs à plusieurs) est un Id de Personne ???
    Avec l'association de EF, je vais me retrouver avec une collection de Personnes dans l'entité Film, sans aucun lien avec les propriétés Realisateur, Acteurs, Producteur...
    Bref, pourquoi une association ne relie-t-elle pas 1 propriété d'une Entité à une autre Entité ?
    Tout ceci est très confus pour moi. J'y perds mon latin.

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur Full-stack
    Inscrit en
    Novembre 2010
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Full-stack

    Informations forums :
    Inscription : Novembre 2010
    Messages : 372
    Points : 489
    Points
    489
    Par défaut
    Bonsoir cher JacquesProgram,

    Citation Envoyé par jacquesprogram Voir le message
    Bonjour,
    j'ai un peu de mal à appréhender les associations dans EF.
    Dans Access par exemple, une relation relie une colonne d'une table à une autre colonne d'une autre table.
    Ici, dans EF, l'association crée une relation entre une Entité et une autre et là, je m'y perds...

    Tout ceci est très confus pour moi. J'y perds mon latin.
    Toutes ces liaisons sont les mêmes. J'ai pas toujours travaillé avec Access. Autant une relation relie 2 colonnes de 2 tables en Access, autant une relation relie 2
    propriétés ou attributs (équivalent de colonne en Access) de 2 entités entre elles.
    Seule changement est une relation de type n-n porteuse de propriété.

    Voici le tutoriel officiel sur EF à cette adresse, et en vidéo ici. C'est comme si on disait, 2 individus ont joins leurs main, et 2 individus sont liés physiquement par leurs mains.

    Cordialement.
    La recherche de la connaissance est une Lumière qui apaise le Cœur.
    Si une réponse vous a été utile , n'oubliez pas de voter en cliquant sur:.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Points : 265
    Points
    265
    Par défaut
    Citation Envoyé par Alexandre le Grand Voir le message
    Autant une relation relie 2 colonnes de 2 tables en Access, autant une relation relie 2
    propriétés ou attributs (équivalent de colonne en Access) de 2 entités entre elles
    Tout à fait. Mais lors de la création du modèle, on ne choisit pas quelle propriété est liée à telle autre ; l'association définit juste que telle entité est liée à telle autre.
    D'après ce que j'ai compris, ce n'est que lorsque la base de données aura été générée que je pourrai mapper les propriétés aux colonnes de la bd. Pour l'instant, j'ai créé 3 associations entre Film et Personne en nommant respectivement les propriétés de navigation Acteurs, Realisateurs, Producteurs dans l'Entité Film (à ce stade, rien ne permet de dire au modèle que ce sont les propriétés Acteur, Realisateur, Producteur qui sont des collections de Personnes, c'est ce que je voulais dire).
    J'espère que c'est bien ainsi qu'il faut procéder.
    Concernant les tutos, le premier lien c'est du database-first ; je vais jeter un œil aux autres, bien qu'ils concernent asp.net.
    Merci.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Points : 265
    Points
    265
    Par défaut
    Bon, concernant les vidéos, c'est aussi du database-first.
    J'ai généré ma base de données, mais je ne vois toujours pas comment faire...
    Dans mon exemple, quelles associations dois-je créer dans mon modèle sachant que la propriété Acteur doit être une collection de Personnes (idem pour Realisateur, Producteur) ?

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur Full-stack
    Inscrit en
    Novembre 2010
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Full-stack

    Informations forums :
    Inscription : Novembre 2010
    Messages : 372
    Points : 489
    Points
    489
    Par défaut
    Bonjour,

    Il me semble que tu es bcp pressé, ce qui semble créer l'embrouille. Pour crée une association dans le modèle on procède comme suit:
    -Clic droit dans un espace vide du modèle, clic sur Ajouter, choisir Association, on se retrouve avec une figure comme sur l'image, là on fait les choix de son association. On peut aussi créer les association depuis la BD dans SQL Server, et faire la mise à jour du modèle à la suite d'un clic droit.

    Cordialement.
    Images attachées Images attachées  
    La recherche de la connaissance est une Lumière qui apaise le Cœur.
    Si une réponse vous a été utile , n'oubliez pas de voter en cliquant sur:.

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Points : 265
    Points
    265
    Par défaut
    Mon problème n'est pas de créer les associations. Comme tu l'indiques, j'ai créé ainsi les associations entre l'Entité Film et l'Entité Personne.
    Je me retrouve donc avec une propriété de navigation nommée Acteurs qui est une collection de Personnes.

    Mais je ne vois pas comment tout ceci s'articule ensuite. Quand, où et comment dire que c'est la propriété Film.Acteur qui est liée à cette collection de Personnes ?

    Pour reprendre l'exemple de ton image, dans un gestionnaire bd genre Access, on aurait pour chaque côté de la relation, une liste déroulante Table (ici Entité) ET une liste déroulante Colonne (pour savoir quelle colonne précisément est liée). Je m'attendais à trouver ici une liste des Propriétés pour chaque Entité faisant partie de l'association...

    Pour faire un autre parallèle avec cette fois l'approche code-first, si je créais mes classes, je définirais la propriété Acteur comme étant une collection de Personnes, mais en model-first...

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur Full-stack
    Inscrit en
    Novembre 2010
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Full-stack

    Informations forums :
    Inscription : Novembre 2010
    Messages : 372
    Points : 489
    Points
    489
    Par défaut
    Citation Envoyé par jacquesprogram Voir le message
    Mon problème n'est pas de créer les associations. Comme tu l'indiques, j'ai créé ainsi les associations entre l'Entité Film et l'Entité Personne.
    Mais je ne vois pas comment tout ceci s'articule ensuite. Quand, où et comment dire que c'est la propriété Film.Acteur qui est liée à cette collection de Personnes ?

    dans ton 1er message, tu as écris :"mais comment lui dire que Realisateur, Producteur, Acteurs (dans ce dernier cas, relation de plusieurs à plusieurs) est un Id de Personne ???"
    La propriété de navigation est une liaison entre entités, matérialisée en bas (de pages) de chaque entités par le nom de l'autre entité précédé de flèches synonymes d'échanges. Maintenant comment lui dire que: "mais comment lui dire que Realisateur, Producteur, Acteurs (dans ce dernier cas, relation de plusieurs à plusieurs) est un Id de Personne ???", tu le fais lors de la création des associations (voir l'image précédente). Et il serait bon, que tu fournisse la capture d'écran de ton modèle.

    Cordialement.
    La recherche de la connaissance est une Lumière qui apaise le Cœur.
    Si une réponse vous a été utile , n'oubliez pas de voter en cliquant sur:.

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Points : 265
    Points
    265
    Par défaut
    Bon, le modèle complet est forcément plus complexe, c'est pourquoi j'avais simplifié aux 2 tables qui m'intéressaient. Voici la partie qui concerne les films et les personnes:
    Nom : model.jpg
Affichages : 414
Taille : 157,1 Ko


    Voici comment j'ai configuré l'association pour les Acteurs:

    Nom : association.jpg
Affichages : 280
Taille : 49,1 Ko

    J'ai fait de même pour les Directors, Producers, en changeant uniquement les noms des propriétés de navigation, mais rien ne relie tout ceci à leurs propriétés respectives...

    Tous les exemples que je trouve sur le Net n'emploient que des modèles ultra-simplistes du genre Employee - Department où 1 employé est rattaché à 1 Department ; mais rien qui concerne le cas où plusieurs propriétés d'1 Entité doivent être liées à 1 autre même Entité.

  9. #9
    Membre confirmé
    Homme Profil pro
    Développeur Full-stack
    Inscrit en
    Novembre 2010
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Full-stack

    Informations forums :
    Inscription : Novembre 2010
    Messages : 372
    Points : 489
    Points
    489
    Par défaut
    Pour faire les relations comme tu le souhaites avec tables et colonnes aux choix, va dans ta BD sur SQL SERVER. Créer un schema si ne n'est déjà fait. Et crées les associations comme tu le veux par code ou par schéma avec les choix de tables et colonnes, ensuite fais la mise à jour de ton modèle en faisant clic droit, clic sur "mettre à jour le modèle depuis la Base de Données.

    Cordialement.
    La recherche de la connaissance est une Lumière qui apaise le Cœur.
    Si une réponse vous a été utile , n'oubliez pas de voter en cliquant sur:.

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Points : 265
    Points
    265
    Par défaut
    J'ai fait comme tu m'as dit: après plusieurs allers-retours entre SQL Management Studio et Visual Studio, en modifiant la bd d'un côté en en observant comment VS établissait le modèle, je pense que j'ai compris.
    J'ai créé cette simple bd sous SQL Management Studio:
    Nom : bd.jpg
Affichages : 317
Taille : 72,5 Ko

    Voici le modèle créé par VS:

    Nom : modelfrombd.jpg
Affichages : 306
Taille : 21,5 Ko

    En fait, dans les relations plusieurs-à-plusieurs, les colonnes Actor, Director, etc ne servent à rien dans la base de données et donc, dans mon modèle, les propriétés Actor, etc non plus. Il suffit juste de créer plusieurs associations entre Film et Personne, en nommant à chaque fois les propriétés de navigation convenablement (Actors, Directors, etc) pour m'y retrouver (comme j'avais commencé à le faire). Ce sera ensuite à moi d'utiliser la bonne propriété de navigation selon ce que je veux récupérer (les acteurs, les realisateurs, etc.)

    Merci pour ton aide.

  11. #11
    Membre confirmé
    Homme Profil pro
    Développeur Full-stack
    Inscrit en
    Novembre 2010
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Full-stack

    Informations forums :
    Inscription : Novembre 2010
    Messages : 372
    Points : 489
    Points
    489
    Par défaut
    Citation Envoyé par jacquesprogram;7970834
    Voici le modèle créé par VS:

    [ATTACH=CONFIG
    156704[/ATTACH]

    En fait, dans les relations plusieurs-à-plusieurs, les colonnes Actor, Director, etc ne servent à rien dans la base de données et donc, dans mon modèle, les propriétés Actor, etc non plus.
    Merci pour ton aide.
    A titre de rappel, les relations de type n-n ( plusieurs à plusieurs) lorsqu'elles sont porteuses de propriétés se transforment en une nouvelle entité ayant pour clés les clés des entités participants à cette relation.
    La recherche de la connaissance est une Lumière qui apaise le Cœur.
    Si une réponse vous a été utile , n'oubliez pas de voter en cliquant sur:.

  12. #12
    Membre actif
    Profil pro
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Points : 265
    Points
    265
    Par défaut
    Citation Envoyé par Alexandre le Grand Voir le message
    A titre de rappel, les relations de type n-n ( plusieurs à plusieurs) lorsqu'elles sont porteuses de propriétés se transforment en une nouvelle entité ayant pour clés les clés des entités participants à cette relation.
    Tout comme, dans une bd, pour créer une telle relation entre 2 tables, il faut en créer une 3eme qui effectue la jonction et qui reçoit les 2 côtés "plusieurs" des relations.

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

Discussions similaires

  1. [Débutant] Définir des contraintes d'unicité (model-first)
    Par jacquesprogram dans le forum Entity Framework
    Réponses: 2
    Dernier message: 29/10/2014, 15h50
  2. Entity Framework - Model First
    Par Nanais19 dans le forum C#
    Réponses: 3
    Dernier message: 09/10/2012, 11h11
  3. [ORM et BDD] Croyez-vous aux approches Model-first?
    Par _skip dans le forum Débats sur le développement - Le Best Of
    Réponses: 87
    Dernier message: 05/01/2010, 11h36
  4. JTable:comment associer le modele à la tabe?
    Par h_ismaili dans le forum Composants
    Réponses: 2
    Dernier message: 30/05/2007, 16h20

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