2009-04-17 16 views
1

Je suis un débutant. J'ai été capable d'ajouter de nouvelles entités où il y a une relation un-à-plusieurs. J'ai un problème (je ne sais pas comment le faire) en ajoutant une nouvelle Entité lorsque la relation utilise Many-To-Many.Comment ajouter une relation many-to-many dans Entity Framework

Dans mon EDM J'ai:

  1. Orgs
    <Scalar Properties>
    a. Org_ID (champ d'identité)
    b. OrgName
    c. OrgDesc
    <Navigation Properties>
    Building_orgs_Relation

  2. Bâtiments
    <Scalar Properties>
    a) BUILDING_ID (champ d'identité)
    b) Building_Desc
    <Navigation Properties>
    Building_orgs_Relation

  3. Org_Building_Relation
    a) du bâtiment _org_ID (champ d'identité)
    b) ORG_ID
    c) BUILDING_ID
    <Navigation Properties>
    bâtiment
    Org

Je veux:

  • Insérer une nouvelle Orgs
  • Supprimer existants Org
  • Réaffecter Org Pour différents bâtiments
  • Mise à jour Org

Quelqu'un peut s'il vous plaît fournir un échantillon sur la façon de le faire en utilisant l'EDM mentionné? Le code VB sera apprécié.

Répondre

1

À l'heure actuelle, Entity Framework est vraiment limité en termes de nombre de relations qu'il peut gérer. La seule chose que le concepteur Visual Studio reconnaîtra est une table constituée de seulement deux colonnes, à la fois les clés étrangères aux deux autres tables et où la clé primaire est une clé composée sur les deux clés étrangères. Donc, si vous avez le contrôle de votre schéma de base de données, une chose que vous pourriez faire est de changer votre table Org_Building_Relation pour supprimer la colonne Building_org_ID et faire de la clé primaire une clé composée sur Org_ID et Building_ID. Si vous faites cela, lorsque vous mappez les tables, Entity Framework reconnaîtra cela comme une relation plusieurs à plusieurs. Si vous ne pouvez pas faire cela (par exemple, vous n'avez pas le contrôle du schéma de la base de données), alors vous devrez vous assurer que les seuls champs que vous mappez dans votre EDMX sont les champs qui se rapportent à la d'autres tables et que vous ne mappez pas la clé primaire. C'est difficile, car l'assistant de cartographie va rejeter et recréer le mappage de stockage chaque fois que vous mettez à jour.Une autre option consisterait à ne pas utiliser un mappage "correct" de plusieurs à plusieurs dans Entity Framework et à traiter la relation comme une autre entité au lieu de la faire subsumer dans la relation.

Je ne me souviens pas si cela a été amélioré dans le prochain .NET 4.0.

+0

J'ai un problème similaire (en utilisant 3.5.1) en ce que j'ai exactement ce que vous décrivez, Craig. Mais j'ai ajouté ma table de mapping après avoir déjà ajouté la table cible. Il ne semble pas ramasser le plus grand nombre de cartes. Je l'ajoute via l'assistant et il place la table de carte dans une autre entité. Alors, est-ce que quelqu'un a un lien ou des informations sur la façon de le faire correctement avec la version 3.5.1? – DrydenMaker

+0

La table de mappage * sera * une entité distincte, avec des relations avec les entités mappées, dans 3.5 SP1. –

+0

Compris mon problème. C'était en fait un problème de schéma. Je ne suis pas un expert, mais je peux faire rapport sur ce que je vois. Il crée une entité, mais il ne s'affiche que comme une propriété de navigation dans le concepteur. Donc, si le nom de la table est foo2barMap, vous ne pouvez pas faire un Dim baz comme foo2barMap. Mais sur une instance de foo, vous avez un foo.bar et un foo.barRefrence. Vous avez alors aussi un foo.foo2BarMap.Add (someBar). – DrydenMaker

Questions connexes