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

ASP.NET MVC Discussion :

Problème relation plusieurs à plusieurs


Sujet :

ASP.NET MVC

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 58
    Points : 35
    Points
    35
    Par défaut Problème relation plusieurs à plusieurs
    Bonjour, j'ai un problème lorsque je veux ajouter plusieurs fois le même élément dans une relation de plusieurs à plusieurs.

    Le problème est que la méthode que j'utilise pour ajouter un menu ou un plat à la commande ne me permet pas par exemple d'ajouter plusieurs fois le menu d'id 1, il ne me l'ajoute qu'une seule fois.


    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
            public void setCommande(commande _commande, List<int> listeplat, List<int> listemenu)
            {
                using (Entities contexte = new Entities())
                {
                    contexte.AddObject("commande", _commande);
     
                    foreach (int Cplats in listeplat)
                    {
                        plat Cplat = contexte.plat.Single(t => t.ID == Cplats);
                        _commande.plat.Add(Cplat);
                    }
     
                    foreach (int Cmenus in listemenu)
                    {
                        menu Cmenu = contexte.menu.Single(t => t.ID == Cmenus);
                        _commande.menu.Add(Cmenu);
                    }
     
                    contexte.SaveChanges();
                }
            }
    Merci à vous

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 58
    Points : 35
    Points
    35
    Par défaut
    J'ai pas donner assez de détails il me semble.

    En fait le problème c'est que dans la boucle qui ajoute un plat, ou celle qui ajoute un menu. Je ne peu ajouter un même menu qu'une seule fois alors qu'il peu y avoir plusieurs fois le même menu. il serait peut être intéressant de gérer la quantité dans ma relation mais avec EF je ne sais pas comment m'y prendre...

    Sinon plusieurs fois le même menu ou plat me conviens parfaitement.


    Merci à vous

  3. #3
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 065
    Points : 4 229
    Points
    4 229
    Par défaut
    tu as une contrainte d'unicité au niveau de ta table commande? sinon tu peux gérer ça en mettant une colonne quantité ou en créant une table intermédiaire contenant ton id commande et tes id plat et menu

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 58
    Points : 35
    Points
    35
    Par défaut
    Merci pour ta réponse

    En fait J'ai créer j'ai générer la BDD depuis un edmx.

    J'ai donc bien une table CommandePlat et CommandeMenu avec une clef primaire constituée de 2 champs qui sont les ID de commande et de plat ou menu.


    En fait j'ai du mal a prendre en main tout ce qui tourne autour de Entity Framework je n'ai pas trouver se source suffisante pour bien m'expliquer le fonctionnement.

    En fait je ne sais pas comment procéder avec EF. je pourrais très bien tout faire à la main, rajouter le champ dans la BDD et gérer la requête.

    Mais le seul but de ce projet et d'apprendre les bonnes manières avec EF.

    Merci à vous de m'aider à progresser

  5. #5
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 065
    Points : 4 229
    Points
    4 229
    Par défaut
    ta clé primaire doit être constitué que de l'id commande pour pouvoir ajouter plusieurs fois le même menu ou plat à ta commande

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 58
    Points : 35
    Points
    35
    Par défaut
    En fait je dois ajouter une clef primaire ID à la table menuCommande et aussi à la table platCommande mettre la clef primaire uniquement sur le champ ID ou bien rajouter une colonne quantité et metre la clef primaire sur les 3 champs.

    Seulement je ne sais pas comment faire ça avec l'EDMX je continue de chercher.

  7. #7
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 065
    Points : 4 229
    Points
    4 229
    Par défaut
    je disais qu'il fallait juste que ta clé primaire soit sur le champ ID de ta table

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 58
    Points : 35
    Points
    35
    Par défaut
    ok j'ai bien compris, seulement je suis face à l'EDMX et je ne trouve pas comment rajouter ce champs. la seule solution que je trouve est de modifier à la main le sql qui est généré ce qui m'oblige à chaque modification de refaire cette manipulation.

    En fait l'edmx ne me montre que l'association, il ajoute lui meme la table associative commandemenu avec commande_ID et menu_ID comme PK.

    Je dois donc trouver comment ajouter un champ ID à la table et mettre la clef primaire dessus. C'est ça qui me pose problème.

    En tout cas merci à toi de prendre le temps de m'aider.

  9. #9
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 065
    Points : 4 229
    Points
    4 229
    Par défaut
    et sur cette table commandemenu tu peux décider de modifier la PK et de dire que c'est commandeMenuId la clé primaire ou ajouter un champs quantité c'est au choix

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 58
    Points : 35
    Points
    35
    Par défaut
    Dans l'edmx elle n'apparait pas du tout il n'y a que l'association. Le mieux est peut être que je crée dans l'edmx la table associative et que je fasse les relations manuellement mais j'ai l'impression de ne pas utiliser correctement l'outil.
    Images attachées Images attachées  

  11. #11
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 065
    Points : 4 229
    Points
    4 229
    Par défaut
    je pourrais pas t'aider plus pour le cas du Entity model First étant donné que moi je crée d'abord ma base et ensuite je l'importe, peut être vaudrait mieux que tu crée toi même ta table, pourquoi tu n'utiliserai pas correctement l'outil si le résultat te conviens pas libre à toi de le changer

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 58
    Points : 35
    Points
    35
    Par défaut
    en fait si je change le model je perd les modifications puisque l'edmx va être générer à nouveau.

    j'attends de voir si quelqu'un à une explication en utilisant l'edmx car je trouve dommage de ne pas l'utiliser pour concevoir la base si on l'utilise bien je pense que c'est un gain de temps. (je rappel que mon projet n'a pas de but commercial mais uniquement d'apprendre a maitriser la technologie).

    Mais un grand merci à toi toute idée est bonne a prendre

  13. #13
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 065
    Points : 4 229
    Points
    4 229
    Par défaut
    pourquoi il serait généré a nouveau, si c'est toi qui le modifie et tu l'enregistre il n'y a pas de raison normalement

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 58
    Points : 35
    Points
    35
    Par défaut
    Peut être que je me trompe.

    Je passe l’édition de l'edmx en XML:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      <EntityType Name="menucommande">
        <Key>
          <PropertyRef Name="ID" />
          <PropertyRef Name="menu_ID" />
          <PropertyRef Name="commande_ID" />
        </Key>
        <Property Name="ID" Nullable="false" Type="int" />
        <Property Name="menu_ID" Nullable="false" Type="int" />
        <Property Name="commande_ID" Nullable="false" Type="int" />
      </EntityType>
    En souligné ce que j'ai modifié.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        <AssociationSetMapping Name="menucommande" TypeName="YouFood.menucommande" StoreEntitySet="menucommande">
          <EndProperty Name="menu">
            <ScalarProperty Name="ID" ColumnName="menu_ID" />
          </EndProperty>
          <EndProperty Name="commande">
            <ScalarProperty Name="ID" ColumnName="commande_ID" />
          </EndProperty>
        </AssociationSetMapping>

    et dans l'AssiciationSetMapping j'ai cet erreur :
    Erreur 8 Erreur 3025*: Problème de fragments de mappage à partir de la ligne 804*: Doit spécifier le mappage de toutes les propriétés de clé (menucommande.ID, menucommande.menu_ID, menucommande.commande_ID) de la table menucommande.
    C:\Users\scude\Documents\Visual Studio 2010\Projects\YouFood\YouFood\YouFood.edmx 805 5 YouFood

    Quel est la bonne méthode ? editer en xml ou rajouter manullement dans l'editeur d'EDMX la table menucommande.

    Je suis un peu perdu pour le coup ...

  15. #15
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 065
    Points : 4 229
    Points
    4 229
    Par défaut
    je pense que la seconde solution, ajouter manuellement la table dans l'edmx est la meilleur solution, modifier l'xml doit impliquer plus de modification que tu ne le penses et c'est pour ça qu'on a une interface qui se charge de tout faire.

Discussions similaires

  1. [AC-2007] Relation réflexive plusieurs-plusieurs
    Par Vijinn dans le forum Modélisation
    Réponses: 1
    Dernier message: 06/07/2015, 16h27
  2. Réponses: 3
    Dernier message: 07/11/2013, 16h02
  3. Réponses: 11
    Dernier message: 07/01/2013, 22h45
  4. [AC-2007] relation de plusieurs à plusieurs
    Par emilk dans le forum Modélisation
    Réponses: 1
    Dernier message: 16/02/2011, 18h57
  5. Problème de Mapping : plusieurs à plusieurs
    Par Invité dans le forum Hibernate
    Réponses: 8
    Dernier message: 23/05/2008, 16h56

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