Entity framework core 实体框架核心未看到所有子类型字段
您好,我正在尝试使用一个包含派生类型重新组合的具体表,使用EF Core使用派生类Entity framework core 实体框架核心未看到所有子类型字段,entity-framework-core,code-first,Entity Framework Core,Code First,您好,我正在尝试使用一个包含派生类型重新组合的具体表,使用EF Core使用派生类 public abstract A { public int Id{get;set;} } public B:A { public string Name{get;set;} } public C:A { public bool IsMan{get;set;} } public class MyContext:DBContext { public DBSet<A> ATa
public abstract A
{
public int Id{get;set;}
}
public B:A
{
public string Name{get;set;}
}
public C:A
{
public bool IsMan{get;set;}
}
public class MyContext:DBContext
{
public DBSet<A> ATable {get;set;}
}
公共摘要A
{
公共int Id{get;set;}
}
公共B:A
{
公共字符串名称{get;set;}
}
公共C:A
{
公共布尔伊斯曼{get;set;}
}
公共类MyContext:DBContext
{
公共数据库集ATable{get;set;}
}
生成数据库时,表ATable
不包含C
子类型的字段。生成的表仅包含A
-s字段和B
-s字段
生成的表
Id
Name
p.S我需要使用某种鉴别器吗?我只希望有一个表具有两个子类型的重新组合,并且能够使用
of type
Linq
扩展访问它。您所描述的被称为TPH(每个层次的表)继承策略,目前是EF Core唯一支持的模式
但是,与EF6不同,EF Core不会通过反映模型部件自动检测衍生实体。这在EF6中造成了意外的副作用,因此已被删除,现在需要在模型中显式包含派生类型(如果导航属性或显式DbSet
s等其他机制未包含派生类型)。这在EF核心文件的第节中进行了解释:
按照惯例,EF不会自动扫描基本类型或派生类型;这意味着,如果希望映射层次结构中的CLR类型,则必须在模型上显式指定该类型。例如,仅指定层次结构的基类型不会导致EF Core隐式包含其所有子类型
因此,您需要通过示例模型获得TPH的最低要求是
public DbSet<B> Bs { get; set; }
public DbSet<C> Cs { get; set; }
modelBuilder.Entity<B>();
modelBuilder.Entity<C>();