实体框架与POCO在第二实体中生成FK的多对一关系

时间:2018-07-05 15:07:18

标签: entity-framework entity-framework-6

我有以下POCO关系;

public class Equipment : Entity
{
    //... removed for brevity
    public virtual List<Qualification> RequiredQualifications { get; set; }
}

    public class Qualification : AuditableEntity
{
    public string Name { get; set; }
    //... removed for brevity
}

因此这是一种单向关系,其中相同的Qualification可以链接到Equipment

Entity Framework 6在generate Qualifications表中创建FK EquipmentId,然后打破了可以将同一资格链接到多个设备的事实。

我需要创建链接POCO还是可以设置它(通过FluentAPI)以自动生成两个实体之间的链接?

1 个答案:

答案 0 :(得分:1)

如果一件设备可以具有多个资格,并且一个资格可以链接到多个设备,则需要配置多对多关系。

最简单的方法是在两个实体上配置导航属性:

public class Equipment : Entity
{
    //... removed for brevity
    public virtual ICollection<Qualification> RequiredQualifications { get; } = new HashSet<Qualification>();
}

public class Qualification : AuditableEntity
{
    public string Name { get; set; }
    public virtual ICollection<Equipment> RelatedEquipment { get; } = new HashSet<Equipment>();
    //... removed for brevity
}

或者,如果您不希望从资格到设备的导航属性,则使用FluentAPI将其配置为多对多关系。

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

    modelBuilder.Entity<Equipment>().HasMany(e => e.RequiredQualifications).WithMany();

}