2010-07-12 4 views
3

J'essaie de comprendre certaines bonnes pratiques fondamentales en utilisant Entity Framework.Meilleure pratique pour récupérer des données à l'aide d'Entity Framework 4.0

Ma conception EDM comporte des entités Groupe et Utilisateur dont le Groupe peut contenir des utilisateurs et d'autres groupes.

La question est:

Quelle est la meilleure façon de récupérer les utilisateurs d'un groupe? Pour obtenir les groupes, il suffit de créer l'objet de contexte et de créer une liste à partir de la table des groupes.

Mais quand je veux voir les utilisateurs dans un groupe, le contexte est fermé (comme il se doit).

Je pensais à deux approches:

1) d'envoyer à nouveau le groupe, l'attacher au contexte et utiliser la méthode Load() sur les utilisateurs et retourner la liste des utilisateurs.

Ici, je ne sais pas quand attacher et quand je ne devrais pas et quand l'EDM se développera je vais devoir faire beaucoup avant et en arrière pour chaque référence pour charger

2) requête LINQ de la côté utilisateur.
de u contexte.Users où u.Groups.Contient (groupe) sélectionnez u

Ici, je reçois une exception que seuls les types primitifs peuvent être utilisés.

Alors, quelle est la bonne façon de le faire?

Merci Ronny

Répondre

3

Il n'est pas tout à fait clair si vous avez une relation un-à-plusieurs ou plusieurs-à-plusieurs entre vos utilisateurs et groupes. Selon la description en haut, a group may contain users - c'est un à plusieurs. Selon votre code: from u in context.Users where u.Groups.Contains(group) select u - c'est beaucoup-à-plusieurs. Ainsi, je vais fournir des échantillons pour les deux cas.

un à plusieurs - un groupe contient plusieurs utilisateurs, un utilisateur peut appartenir à un seul groupe:

context.Users.Where(u => u.Group.Id == group.Id); 

Beaucoup à beaucoup - un groupe contient plusieurs utilisateurs, un utilisateur peut appartenir à plusieurs groupes:

context.Users.Where(u => u.Groups.Any(g => g.Id == group.Id)); 
0
context.Users.Select(u => u).Where(e => e.Groups.Contains(group)) 

Est-ce que le travail?

+0

Désolé, même exception: Impossible de créer une valeur constante de type 'EDM.Data.Group'. Seuls les types primitifs ('tels que Int32, String et Guid') sont pris en charge dans ce contexte. – Ronny

Questions connexes