Entity Framework 6 Code First系列3: 实体类M:N配置

来源:互联网 发布:sql case when else 编辑:程序博客网 时间:2024/06/05 15:03

M:N单向映射(Role-Menu)
一般情况下,一个角色可访问多个菜单,一个菜单也可被多个角色访问,这是一种典型的M:N关联映射。

实体类Role

  public class Role    {        /// <summary>        /// 角色名称        /// </summary>        public string Name { get; set; }        /// <summary>        /// RoleId        /// </summary>        public int Id { get; set; }        /// <summary>        /// 导航属性-关联菜单列表        /// </summary>        public virtual IList<Menu> MenuList { get; set; }    }

配置类OperaterInfoMap

 public class RoleMap : EntityTypeConfiguration<Role>    {        public RoleMap()        {            this.ToTable("T_Role");            this.HasKey(role => role.Id);            //N:N映射-如需配置双向映射,只需在.WithMany()添加Menu的导航属性即可            this.HasMany(role => role.MenuList).WithMany().Map(m =>            {                m.MapLeftKey("RoleId");                m.MapRightKey("MenuId");                m.ToTable("T_RoleMenu");            });        }    }

实体类Menu

    public class Menu    {        /// <summary>        /// MenuId        /// </summary>        public int Id { get; set; }        /// <summary>        /// Name        /// </summary>        public string Name { get; set; }    }

配置类MenuMap

 public class MenuMap:EntityTypeConfiguration<Menu>    {        public MenuMap()        {            this.ToTable("T_Menu");            this.HasKey(k => k.Id);//设置主键        }    }

控制台测试程序

 using (var dbContext = new EFDbContext())            {                var rolelist = dbContext.RoleList.Include("MenuList")                .Where(r => r.Name.Contains("面审") && r.Name.EndsWith("审核")).ToList();                foreach (var item in rolelist)                {                    Console.Write("{0}:",item.Name);                    foreach (var menu in item.MenuList)                    {                        Console.Write(" {0} ", menu.Name);                    }                    Console.WriteLine();                }            }

执行结果

执行结果

Profile监听到的结果:

监听结果

   //N:N映射-如需配置双向映射,只需在.WithMany()添加Menu的导航属性即可   this.HasMany(role => role.MenuList).WithMany().Map(m =>    {          m.MapLeftKey("RoleId");          m.MapRightKey("MenuId");          m.ToTable("T_RoleMenu");    });

m.ToTable(“T_RoleMenu”);设置M:N关联借助的第三张辅助表“T_RoleMenu”
m.MapLeftKey(“RoleId”);设置表T_RoleMenu中外键RoleId指示的是表T_Role中的主键Id
m.MapRightKey(“MenuId”);设置表T_RoleMenu中外键MenuId指示的是表T_Menu中的主键Id

0 0
原创粉丝点击