2010-09-09 4 views
0

Je souhaite implémenter le problème mentionné ci-dessous dans Entity Framework.Entity Framework: implémenter un scénario d'association très simple

J'ai 2 tables (ci-dessous sont leurs versions simplifiées)

produits tableau

itemId,itemName 

balises Table

tagId,tagName 
  • ma logique est un élément peut avoir plus de une étiquette et une étiquette peuvent avoir plus d'un article lié à elle, ainsi j'ai ajouté beaucoup à beaucoup de rapport (svp cor rect moi ici, si je me trompe)

  • J'ai créé un modèle (fichier edmx) et une base de données.

  • J'ai écrit du code pour ajouter des données à mes tables d'échantillons, et cela fonctionne bien. Ci-dessous des exemples de données

    itemId itemName ---items table 
        1 | fish 
        2 | cell phone 
    
    tagId tagName ------tags table 
        1 | eatable 
        2 | electronics 
        3 | non veg 
    

je dois savoir comment écrire ces 3 requêtes

  1. ajouter relation entre l'étiquette et l'élément par exemple Ajouter des tags « mangeaille », « nonveg » au point « poisson »
  2. obtenir tous les tags liés à un élément (par exemple: les poissons)
  3. obtenir tous les tags ne sont pas liés à un élément (par exemple: les poissons)
+0

"mangeable" devrait vraiment être "comestible" en bon anglais. –

Répondre

1

Si votre association est en place avec la dénomination normale (un diagramme EDMX dans votre question serait utile) ...

Q 1.

Tag tag = ... // probably load from database or create if necessary 
Item item = ... 
item.Tags.Add(tag); 

Q 2.

var tags = item.Tags; 

Q 3.a Tous les tags liés à aucun élément

var unrelatedTags = context.Tags.Where(tag => tag.Items.Count() > 0); 

Q 3.b Tous les tags ne sont pas liés à un élément spécifique

var unrelatedTags = context.Tags.Except(item.Tags); 
+0

La requête 2 ne fonctionnait pas, dans la requête 3 (c.-à-d. Pour les étiquettes non liées): iam recherchant des étiquettes qui ne sont pas liées à un article particulier. ex: dans le cas "poisson" je veux qu'il retourne "électronique" car c'est la seule étiquette de toutes les étiquettes qui n'est pas liée au poisson –

+0

Ajouté 3b pour un article spécifique. Alors qu'est-ce qui n'a pas fonctionné sur Q2? Comment Q1 peut-il fonctionner si Q2 ne vous convient pas? Ils utilisent la même propriété .Tags. –

+0

en q2 iam recherche toutes les étiquettes qui sont liées à un article. en cas de poisson il devrait revenir comestible et non végétarien. J'ai trouvé le chemin: item.Tags est okie, mais lors de l'écriture de la requête pour l'item, nous devons inclure une balise comme :: var item = _context.items.include ("tags") .premier (i => i.name = "poisson "), maintenant item.tags, est correct. Je suis toujours à la recherche d'une troisième requête. –