De retour des données à partir de 2 tables avec Entity Framework

Je travaille avec MVC3 et Entity Framework, mais je suis arrivé à un point où j'ai besoin de plus de données provenant de différentes tables. Habituellement, je ferais quelque chose de ce genre pour obtenir les données à partir d'une table:

Table: Users
id
username

Dans le code que je ferais quelque chose comme cela pour obtenir tous les utilisateurs:

public static IEnumerable<Users> GetUsers( int userId )
{
    MyEntities ent = new MyEntities();

    return from g in ent.Users
           where g.OwnerUserId == userId
           select g;
}

Donc, ce serait de me donner tous mes utilisateurs.


Mais un utilisateur peut se joindre à un groupe, et je dois profiter de tous les noms d'utilisateurs à partir d'un groupe spécifique.

Table: userGroups
id
fk_user_id
fk_group_id

Maintenant, si j'utilise ce code:

public static IEnumerable<userGroups> GetUsersFromGroup( int groupId )
{
    MyEntities ent = new MyEntities();

    return from g in ent.userGroups
           where g.OwnerUserId == userId
           select g;
}

Maintenant, évidemment, cela ne me renvoie les données de la "groupes d'utilisateurs" de la table. Mais de toute façon j'ai aussi besoin du nom d'utilisateur à partir de la table des Utilisateurs. Comment puis-je obtenir des données trop et toujours le retour de mon "groupes d'utilisateurs" comme un IEnumerable?

En SQL, je voudrais simplement faire une JOINTURE GAUCHE, mais je ne peux pas vraiment comprendre comment ça fonctionne ici.

PS, cela n'a rien à voir avec votre question, mais en voyant le "statique" modificateur sur quelque chose qui accède à la base de données qui me frappe comme Une Mauvaise Chose(tm). Je ne sais pas ce que votre situation est, mais il peut être utile d'afficher les moqueries et le couplage lâche que possible refactoring objectifs quand vous le pouvez. Comme il est en ce moment votre code n'est pas en mesure d'être l'objet de tests unitaires ou échangé lorsque les besoins inévitablement changer.
Je pense que vous trouverez que vous pouvez obtenir beaucoup mieux kilométrage de votre ORM et le modèle de domaine si vous arrêtez de penser à vos données dans une table SQL ou de la représentation et de commencer à penser à ce sujet que la cohésion d'un domaine. Le plus grand obstacle que beaucoup de devs visage, c'est qu'ils sentent qu'ils ont besoin pour la conception de leur domaine de modèles à imiter la persistance de la structure. Oublier comment les données sont stockées et de se concentrer sur ce que vous voulez faire avec elle. Avec un peu de planification, vous pouvez réduire le domaine des dépendances sur les problèmes d'infrastructure et de se concentrer sur les affaires de l'utilitaire

OriginalL'auteur w00 | 2012-04-02