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 :

2 liens 1-N entre 2 tables (dans le même sens)


Sujet :

Entity Framework

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2010
    Messages : 188
    Points : 167
    Points
    167
    Par défaut 2 liens 1-N entre 2 tables (dans le même sens)
    Bonjour,
    Je ne sais pas si en préfixe je dois mettre débutant ou non car c'est sur Entity Framework Core 2.0 que j'ai une question, là je suis débutant. EF6 ça va...

    La surprise fût de taille lorsque j'ai voulu faire une liaison Many-2-Many entre 2 tables... OK, j'ai trouvé une solution ici par exemple, elle est implémentée et ça fonctionne bien (en tout cas pour le moment ça compile, ça me crée bien les tables et les clés étrangères donc a priori tout va bien).

    Après quelques jours sans problème, mon chef de projet vient me voir pour le demander un ajout entre 2 tables qui avaient déjà un lien One-2-Many qui fonctionnait bien.

    Qu'à cela ne tienne, je code le second lien et là, patatrac, je rèccupère de nouveau le fameux message d'erreur : "Unable to determine the relationship represented by navigation property 'Action.Utilisateur' of type 'Utilisateur'..."

    Explication :
    Dans mon modèle de données fonctionnel, j'ai un utilisateur qui fait (ou doit faire) des actions (premier lien vers les utilisateurs qui fonctionnait nickel) mais je dois maintenant savoir qui a planifié ces actions (et hop second lien vers les utilisateurs). Là ça coince (bien sûr je n'ai pas mis le même nom dans la classe mais ça pointe bien vers la même table). D'ailleurs, dès que j'en mets un en commentaire, ça passe nickel de nouveau.

    Auriez-vous une idée de comment gérer la situation ?

    Merci

    P.S. : J'ai également complété avec le premier article ci-dessus en lien avec celui-ci (en anglais) : https://blog.oneunicorn.com/2017/09/...-1-the-basics/

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2010
    Messages : 188
    Points : 167
    Points
    167
    Par défaut
    Un peu de code histoire de :
    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
     
    namespace MonProjet
    {
       using System;
       using System.ComponentModel.DataAnnotations.Schema;
     
       public class Utilisateur
        {
            [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
            public int ID { get; set; }
            public string Nom { get; set; }
            public string Prenom { get; set; }
     
            public ICollection<Action> Actions { get; } = new HashSet<Action>();
        }
    }
    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
     
    namespace MonProjet
    {
        using System.ComponentModel.DataAnnotations.Schema;
     
        public class Action
        {
            [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
            public int ID { get; set; }
            public string Nom { get; set; }
            public DateTime Quand { get; set; }
     
            public Utilisateur Utilisateur { get; set; }
            public int UtilisateurID { get; set; }
     
            public Utilisateur Planificateur { get; set; }
            public int PlanificateurID { get; set; }
        }
    }

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2010
    Messages : 188
    Points : 167
    Points
    167
    Par défaut
    Bonjour,
    A force de chercher, j'ai trouvé la solution hier après-midi avec les DataAnnotation.

    Exemple (créé pour l'occasion, donc susceptible de comporter une erreur) avec un code pour ceux que ça intéressent :

    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
    namespace MonProjet
    {
        using System.ComponentModel.DataAnnotations.Schema;
     
        public class Table1
        {
            [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
            public int ID { get; set; }
     
            public Table2 Table2_1 { get; set; }
            public int Table2_1ID { get; set; }
     
            public Table2 Table2_2 { get; set; }
            public int? Table2_2ID { get; set; }
        }
     
        public class Table2
        {
            [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
            public int ID { get; set; }
     
            public ICollection<Table1> Table1_1s{ get; } = new HashSet<Table1>();
            [InverseProperty(nameof(Table1.Table2_2ID))]
            public ICollection<Table1> Table1_2s{ get; } = new HashSet<Table1>();
        }
    }
    Merci et bon courage à vous qui passez par là ;o)

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 30/08/2010, 18h24
  2. Lien avec doublons entre 2 tables
    Par casromain dans le forum Modélisation
    Réponses: 9
    Dernier message: 16/03/2010, 23h56
  3. Lien entre 2 tables dans un formulaire
    Par howvrell dans le forum IHM
    Réponses: 3
    Dernier message: 24/06/2009, 21h57
  4. relation entre 2 tables dans un DataSet
    Par Abdelkabir dans le forum VB.NET
    Réponses: 2
    Dernier message: 13/08/2007, 15h20
  5. [Conception]Lien plusieurs à plusieurs entre trois table
    Par egg3774 dans le forum Modélisation
    Réponses: 5
    Dernier message: 20/04/2007, 18h44

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