EF Core继承的属性未在迁移脚本中反映出来

时间:2017-08-14 17:51:17

标签: inheritance ef-code-first entity-framework-core

我正在尝试迁移以下模型,并且继承没有反映在生成的迁移脚本中。我错过了什么?我目前正在使用PM通过简单的Add-Migration处理迁移脚本生成,然后在VS2017中针对SQL 2016进行Update-Database。

public class Facility
    {
        [Key]
        public int ID { get; set; }
        public bool Deleted { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public byte? Image { get; set; }

        public List<LocationFacility> LocationFacilities { get; set; }
    }

    public class Helipad : Facility
    {
        public decimal Size { get; set; }
        public decimal MaximumWeight {get; set;}
    }

1 个答案:

答案 0 :(得分:1)

基于Documentation of EF Core

为了按照约定将某些类型包含在模型中,您需要DbSet属性或指向该类型的Navigation属性,或者在OnModelCreating中引用它。 Facility类上有导航属性。也许在模型中包含的类型上指向Facility的某些反向导航会导致Facility被包含。但是除非您明确引用它,否则不会添加Helipad。 EF Core为模型中的包含类型设置了TPH。有层次结构。但如果不包括在内,它不会尝试在层次结构中查找类型。

要解决此问题,最简单的方法是为要包含在Derived类DbContext中的类型添加DbSet属性。如果您不想公开该类型的DbSet属性,则可以在OnModelCreating方法中编写以下内容。

modelBuilder.Entity<Helipad>();

希望这可以解决问题。