Entity Framework, отношения «многие ко многим» и запросы - PullRequest
1 голос
/ 23 марта 2012

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

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;

Однако (см. мой связанный вопрос ), поскольку у меня нет доступа к таблице сопоставления,Я не уверен, что лучший способ найти соответствующие разрешения.Как лучше всего это сделать?

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

1 Ответ

2 голосов
/ 23 марта 2012

Попробуйте

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