首先加入EF代码的多对多关系表

时间:2014-04-28 23:22:03

标签: c# .net entity-framework ef-code-first asp.net-mvc-5

我正在开发一个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。如何通过角色名称在具有角色的所有用户的控制器列表中访问?

2 个答案:

答案 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"));