在Entity Framework中模型多对多

时间:2017-03-17 03:22:20

标签: c# .net entity-framework

我需要在EF中模拟多对多的关系。我经常遇到的答案要求两个实体互相引用。

这是我的情况。

我有一个Role实体,它可以拥有多个权限(“权限实体”。)Role将有一个名为权限的列表。另一方面,一个权限可以属于多个角色,但它没有role的引用属性。

我该如何建模?

另外,我可以使用Role级联新权限吗?

1 个答案:

答案 0 :(得分:1)

使用Code-First,您可以使用此建模:

public class Role
{
    public Role() 
    {
        this.Premission = new HashSet<Premission>();
    }

    public int RoleId { get; set; }
    public string RoleName { get; set; }

    public virtual ICollection<Premission> Premissions { get; set; }
}

public class Premission
{
    public Premission()
    {
        this.Role = new HashSet<Role>();
    }

    public int PremissionId { get; set; }
    public string PremissionName { get; set; }

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

使用Fluent Api,您可以将其映射为:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{

    modelBuilder.Entity<Role>()
                .HasMany<Premission>(s => s.Premissions)
                .WithMany(c => c.Roles)
                .Map(cs =>
                        {
                            cs.MapLeftKey("RoleRefId");
                            cs.MapRightKey("PremissionRefId");
                            cs.ToTable("Role_Premission");
                        });

}