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

C# Discussion :

[Entity Framework] Relation *-*


Sujet :

C#

  1. #1
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 174
    Par défaut [Entity Framework] Relation *-*


    Je débute avec Entity Framework et j'essaye de ramener depuis ma base de données une relation *-*

    J'ai la table A et B relié par une table A_B qui contient l'id des 2 autres tables.

    EF ne veux pas me ramener cette table A_B et impossible de mapper les entités sans cela.

    Merci de votre aide.

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    pour une relation * * il me semble qu'entity framework met des collections de chaque coté plutot que de mettre la table du milieu à disposition
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 174
    Par défaut
    Ok pour le côté entités, mais l'enregistrement en base de données se passe comment si la table n'est pas mappée ?

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    ca se débrouille


    table A
    idA

    table B
    idB

    table C
    idA
    idB

    entity framework =>
    entité A
    id A
    liste de B

    entité B
    id B
    liste de A

    sur un entité A faire
    [liste de B].add(new idA) ajoute une ligne dans table C (new idA, idB appelant .add)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 174
    Par défaut
    Hmm en fait ca ne marche pas.

    Voici le schéma généré depuis la base de données.


    J'essayes d'insérer la table FUN_MKT qui est la liaison entre Function et MarketSegment, mais impossible. Si je rajoutes à la main une liaisons *-*, impossible de lui préciser d'aller voir dans la table FUN_MKT.
    Ce que je souhaite, c'est quand je sélectionne un contact d'une compagnie, que les fonctions du contact soient filtrés par rapport au segment de la compagnie via une requete de ce genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                     var reqfunction = from function in ent.FUNCTION2_FUN
                                       join mkt in ent.MARKETSEGMENT_MKT on function.FUN_ID equals mkt.MKT_ID
                                       select function;

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    et si tu créés la tables et que tu laisses le designer voir la liaison via une mise à jour auto du modèlé ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 174
    Par défaut
    C'est ce que je faisait, mais je viens de trouver !

    Pour être ramener dans le designer, une table doit avoir une clé primaire et j'avais déclaré les 2 clés en tant que Unique et non PK.



    J'ai donc bien ma liaison *-*, ce que je souhaite maintenant c'est trouvé la bonne requête afin que seule les fonctions identique au segment de ma compagnie apparaisse

    Ceci me renvoie toujours la totalité de la table Function_Fun
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                     var reqfunction = from  mkt in ent.MARKETSEGMENT_MKT
                                       join function in ent.FUNCTION2_FUN on mkt.MKT_ID equals function.FUN_ID
                                       select function;
    Pour être plus précis, j'aimerais traduire cette fonction SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select * from function2_fun fun, marketsegment_mkt mkt, fun_mkt 
    where fun_mkt.mkt_id = mkt.mkt_id and fun_mkt.fun_id = fun.fun_id and mkt.mkt_smktseg = '42D'
    en Linq

  8. #8
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 174
    Par défaut
    Je viens de trouver une requete fonctionnelle, mais qui me parait très laide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                     var reqfunction = from function in ent.FUNCTION2_FUN
                                       where function.MARKETSEGMENT_MKT.Where(m => m.MKT_ID == mkt_id).FirstOrDefault().MKT_ID == mkt_id
                                       select function;
    Est il possible de l'améliorer ?

  9. #9
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 174
    Par défaut
    Vu le peu de réponse, voici quand même la solution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var req = from function in ent.FUNCTION2_FUN
                 from mkt in function.MARKETSEGMENT_MKT
                 where mkt.MKT_ID == Id
                 select function;

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

Discussions similaires

  1. [Entity Framework] relations n à n
    Par ALCINA dans le forum Entity Framework
    Réponses: 1
    Dernier message: 17/12/2010, 12h25
  2. Réponses: 4
    Dernier message: 22/03/2010, 00h37
  3. Ajout Relation Entity Framework
    Par YoNoSe dans le forum ASP.NET
    Réponses: 0
    Dernier message: 13/12/2009, 22h02

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