2012-03-23 4 views
1

У меня есть отношение «многие ко многим» между пользователями и группами, и у меня есть таблица, которая может содержать разрешение для группы. Таким образом, юридические лица выглядеть примерно так:Entity Framework, отношения «многие ко многим» и запросы

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), так как у меня нет доступа к таблице отображения, я не уверен, что лучший способ найти применимые разрешения. Каков наилучший способ сделать это?

Спасибо за вашу помощь, Эрик

ответ

2

Try

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