实体框架 - 如何配置用户角色多对多关系

时间:2017-04-06 01:55:49

标签: entity-framework ef-code-first ef-code-first-mapping

以下是用户实体的定义,有一个导航属性角色

    public class User
    {
        public User()
        {
            Roles = new List<Role>();
        }

        public string Id { get; set; }

        public string Username { get; set; }

        public virtual ICollection<Role> Roles { get; set; }

以下是角色实体的定义

public class Role
{
    public string Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }

我想要的是定义多对多关系,并生成一个关系表 UserRole ,使用 UserId 作为左键, RoleId 作为正确的密钥,那么如何编写配置代码?

1 个答案:

答案 0 :(得分:0)

用户:

public class User
{
    public User()
    {
        Roles = new List<Role>();
    }

    public string Id { get; set; }
    public string Username { get; set; }
    public virtual ICollection<UserRole> Roles { get; set; }
}

<强>作用:

public class Role
{
    public string Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
}

<强>的UserRole:

public class UserRole
{
    public string Id { get; set; }
    public string UserId { get; set; }
    public string RoleId{ get; set; }

    public virtual User User { get; set; }
    public virtual Role Role { get; set; }
}

覆盖dbcontext中的OnModelCreating方法:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.Entity<User>()
        .HasMany(c => c.Roles )
        .WithMany()                 
        .Map(x =>
        {
            x.MapLeftKey("UserId");
            x.MapRightKey("RoleId");
            x.ToTable("UserRoles");
        });
}