我正在开发一个asp.net mvc5 ef5应用程序。我使用ef代码第一种方法。我有两个表User(UserId,Name)和Role(RoleId,Name)。我的DataContext类看起来像这样:
using System.Data.Entity;
namespace WebApp.DAL
{
public class DataContext : DbContext
{
public DataContext(): base("DefaultConnection")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<User>()
.HasMany(u => u.Roles)
.WithMany(r=>r.Users)
.Map(m =>
{
m.ToTable("UserRoles");
m.MapLeftKey("UserId");
m.MapRightKey("RoleId");
});
}
public DbSet<User> Users { get; set; }
public DbSet<Role> Roles { get; set; }
}
}
在我的控制器中,我有一个DataContext类型的属性Context。如何通过角色名称在具有角色的所有用户的控制器列表中访问?
答案 0 :(得分:1)
有一点简单的方法
var adminUsers = Context.Roles.First(r => r.Name == "admin").Users
对于许多角色
string[] roles = {"admin","guest"};
var users = Context.Roles.Where(r => roles.Any(s => s == r.Name)).SelectMany(r => r.Users)
答案 1 :(得分:0)
在这种情况下,没有必要进行显式连接,只需使用导航属性Roles
进行查询...
var adminUsers = Context.Users.Where(u => u.Roles.Any(r => r.Name == "admin"));