Partage
  • Partager sur Facebook
  • Partager sur Twitter

relation entityframework many to many

database first

21 juin 2019 à 11:23:10

Bonjour,

je débute avec entityframework. J'ai une base de donnée sous postgresql que j'ai importé dans visual studio (database first)

voici mon problème :

j'ai des clients qui sont liés à des employés (ces employés ont un emploi)

Voici la classe client_employe généré

  public partial class client_employe
    {
        public long clientid { get; set; }
        public long commercialid { get; set; }
        public long methodeid { get; set; }
        public long programmanagerid { get; set; }
        public long planeurid { get; set; }
        public long qualiteid { get; set; }
        public long siteid { get; set; }
    
        public virtual client client { get; set; }
    }  public partial class client_employe
    {
        public long clientid { get; set; }
        public long commercialid { get; set; }
        public long methodeid { get; set; }
        public long programmanagerid { get; set; }
        public long planeurid { get; set; }
        public long qualiteid { get; set; }
        public long siteid { get; set; }
    
        public virtual client client { get; set; }
    }

ma classe client

public partial class client
    {
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
        public client()
        {
            this.client_employe = new HashSet<client_employe>();
        }
    
        public long id { get; set; }
        public string client1 { get; set; }
        public string adresse { get; set; }
        public string mail { get; set; }
        public string telephone { get; set; }
        public Nullable<long> divisionid { get; set; }
        public bool act { get; set; }
    
        public virtual division division { get; set; }
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<client_employe> client_employe { get; set; }
    }


et ma classe employe

    public partial class employe
    {
        public long id { get; set; }
        public string nom { get; set; }
        public Nullable<long> emploiid { get; set; }
        public string prenom { get; set; }
        public string mail { get; set; }
        public string telephone { get; set; }
        public string matricule { get; set; }
    
        public virtual emploi emploi { get; set; }
    }

Le problème est que je n'arrive pas à interrogé un client afin de récupérer les employés qui lui sont ratachés (commercial, qualite, programmeManager ...)

Je pense qu'il y a un problème avec ma classe client_employe ?

Je précise que le client n'a pas forcement d'employé de défini donc pas de foreign key.

Cordialement,


-
Edité par vlad05 21 juin 2019 à 11:25:41

  • Partager sur Facebook
  • Partager sur Twitter
21 juin 2019 à 12:25:00

J'aimerai pouvoir te répondre directement mais le fouilli dans ton modèle bloque un peu ma compréhension.

Essaies de mieux nommer tes champs.

Dans client_employe, sur quoi pointe le commercialId, sur quoi pointe le methodeId ?

A ta place j'irai sur le forum BDD pour revoir le modèle de ta base. 

  • Partager sur Facebook
  • Partager sur Twitter
21 juin 2019 à 14:34:47

Merci de te pencher sur le sujet,

J'ai fait quelque modif dans la classe

    public partial class client_employe
    {
        public long clientid { get; set; }
        [ForeignKey("clientid")]
        public virtual client client { get; set; }

        public long commercialid { get; set; }
        [ForeignKey("commercialid")]
        public virtual employe commercial { get; set; }

        public long methodeid { get; set; }
        [ForeignKey("methodeid")]
        public virtual employe method { get; set; }

        public long programmanagerid { get; set; }
        [ForeignKey("programmanagerid")]
        public virtual employe pm { get; set; }

        public long planeurid { get; set; }
        [ForeignKey("planeurid")]
        public virtual employe planeur { get; set; }

        public long qualiteid { get; set; }
        [ForeignKey("qualiteid")]
        public virtual employe qualite { get; set; }
        public long siteid { get; set; }
    
        
    }

Chaque planeurid, qualiteid, commercialid est lié à la table employé.

Cette modification ne semble pas fonctionné.

  • Partager sur Facebook
  • Partager sur Twitter
21 juin 2019 à 14:58:11

Avant de penser à Entity framework,

Est ce que ce modèle, sous Postgre, te permets de retrouver les données que tu veux via une requête SQL ?

Si tu y arrives pas ca sert a rien de casser la tête sur ton code il faut d'abord revoir ton modèle (surtout que c'est database first).

Dans ton premier post, on voit bien sur la capture d'écran de l'EDMX que il n'y a pas de relation entre client_employe et employe, donc forcément ça risque de ne pas fonctionner.

Donc, 

Est ce que, sous postgre, ces clés étrangères sont effectives ?

  • Partager sur Facebook
  • Partager sur Twitter
21 juin 2019 à 15:08:24

Non pas de réelles clés étrangères puisque je dois pouvoir mettre les valeurs à null.

Quand j'essai de créer la contrainte, postgre me dit que ce n'ai pas possible (à cause des valeurs null contenu dans la table justement)

Par contre j'ai une requête avec jointure qui fonctionne parfaitement.

  • Partager sur Facebook
  • Partager sur Twitter
21 juin 2019 à 15:38:49

En fait c'est tout à fait possible d'avoir des clés étrangères à NULL. 

Il suffit juste de ne pas mettre de contrainte "NOT NULL" sur la colonne de la clé etrangère

  • Partager sur Facebook
  • Partager sur Twitter
21 juin 2019 à 15:52:44

Effectivement, ma base de données n'acceptent aucune valeur NULL. Je modifie ca et ajoute mes foreign key.

Merci pour l'aide

  • Partager sur Facebook
  • Partager sur Twitter
21 juin 2019 à 19:43:30

Bonjour,

Doublon

Les doublons nuisent au bon fonctionnement du forum et sont donc interdits. Si vous vous êtes trompé de section, il suffit de signaler votre sujet au staff pour qu'il le déplace au bon endroit.

Je vous invite à continuer la discussion sur l'autre sujet :  https://openclassrooms.com/forum/sujet/relation-entityframework-many-to-many-1

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter