实体框架,多对多关系和查询

时间:2012-03-23 02:00:41

标签: entity-framework-4.1 many-to-many

我在用户和群组之间有多对多的关系,我有一个表格,可以包含群组的权限。所以实体看起来像:

public class Group
{
    public int Id { get; set; }
    public virtual ICollection Users { get; set; }
}

public class User
{
    public int Id { get; set; }
    public virtual ICollection Groups { get; set; }
}

public class Permission
{
    public int Id { get; set; }
    public virtual Group { get; set; }
    public int Value { get; set; }
}

我想知道如何找出适用于用户的权限(适用的权限适用于用户所属的任何组)。

在数据库中会有一个名为UserGroups的映射表。如果我有权访问它,LINQ查询将类似于:

var permissions = 
    from p in MyContext.Permissions
    join m in this.DbContext.UserGroups on p.GroupId equals m.GroupId
    where m.UserId.Equals(theUserId)
    select g;

但是(请参阅my related question),由于我无法访问映射表,因此我不确定找到适用权限的最佳方法。最好的方法是什么?

感谢您的帮助, 埃里克

1 个答案:

答案 0 :(得分:2)

尝试

  var permissions = MyContext.Permissions
               .Where(p => p.Group.Users.Any(u => u.Id == theUserId));