代码之家  ›  专栏  ›  技术社区  ›  Matthew Flynn

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

  •  0
  • Matthew Flynn  · 技术社区  · 7 年前

    我有以下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 是的。

    实体框架6在generate qualifications表中创建fk equipmentid,这打破了同一资格可以链接多个设备的事实。

    我需要创建一个链接poco还是可以设置这个(通过fluentapi)来自动生成两个实体之间的链接?

    1 回复  |  直到 7 年前
        1
  •  1
  •   David Browne - Microsoft    7 年前

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

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

    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();
    
    }