2009-11-10 2 views
3

J'ai 3 tables de données et une quatrième table qui mappe entre elles, c'est-à-dire 3 id avec les trois colonnes comme clé primaire.3 way many to many dans Entity Framework

Ce que je veux vraiment, c'est que l'objet A contienne une liste où B est un objet qui contient List. Je me contenterais d'un tableau de 2 dimensions de B et C dans A.

Y a-t-il un moyen de faire cela? Est-ce que je vais à ce sujet tout faux?

Répondre

1

Dans un cas type many-to-many, où la table de jointure ne possède que la clé composite (deux champs de clé primaire), Entity Framework ajoute les propriétés de navigation directement aux entités associées. Toutefois, lorsque la table de jointure comporte des champs supplémentaires, Entity Framework crée une entité pour la table de jointure afin que vous puissiez "obtenir" les informations supplémentaires.

Dans le cas que vous avez décrit ci-dessus, Entity Framework générera une Entité pour votre table "join" qui aura des associations à tous les 3 de vos objets.

J'ai créé un exemple en utilisant les entités Item1, Item2, Item3 et Link.

Du point de vue de la base de données, si je l'ID d'un Item1, je peux interroger la table avec quelque chose comme:

select Item1ID, Item2ID, Item3ID from Link where Item1ID = 1 

Cela me donnera une liste de ITEM2, ITEM3 « paires » qui sont associés avec Item1 # 1. LINQ to Entities, je peut interroger le modèle EF De même en faisant:

var q = 
    from link in context.Link 
    where link.Item1ID == 1 
    select new { link.Item1, link.Item2, link.Item3 }; 

Ou si je l'ai déjà un objet Item1 que je veux des relations pour:

item1.Link.Select(l => new { l.Item1, l.Item2, l.Item3 }); 

Ce ne sont que des exemples de base , mais vous pouvez facilement utiliser les méthodes d'extension LINQ et IQueryable pour transformer/grouper les données à votre convenance.

Si vous pouvez fournir plus de détails sur votre cas, je pourrais vous donner des exemples plus spécifiques. J'espère que cela pourra aider!

Tim

0

Si je comprends bien votre question, vous parlez de relations entre les 3 types d'entités. Supposons que ces entités sont Book, Author et Publisher. Dans cette relation de cas sont

Livre < - many-to-many -> Auteur < - many-to-many -> Editeur < - Livre

La façon dont vous pouvez mapper ces relations votre modèle de domaine dépend de la façon dont vous allez naviguer dans le graphique d'objets dans votre application.

Pour y 3 entités là 3 options:

a) l'objet du livre contient la liste des auteurs et la liste des éditeurs b) Auteur de l'objet contient la liste des livres et de la liste des éditeurs a) Éditeur d'objets contient la liste des livres et la liste des auteurs

Certaines des relations pourraient être redondantes du point de vue de votre conception. Par exemple, pour le cas b) serait suffisant pour conserver une liste de livres dans l'objet auteur, et la liste des éditeurs dans l'objet livre.Sur les mots,

Auteur [Livres] -> Livre [éditeurs] -> Editeur

Autres cas aussi possibles

Editeur [Livres] -> Livre [Les auteurs] -> Auteur Editeur [Auteur] -> Auteur [Livres] -> Livre

Espérons que cela aide.

Questions connexes