我定义了以下类:
public class DeletableEntity
{
public bool IsDeleted { get; set; }
}
public class ClassA : DeletableEntity
{
}
public class ClassB : ClassA
{
}
在OnModelCreating中,我只获得像这样从DeletableEntity继承的实体:
foreach (var entityType in builder.Model.GetEntityTypes())
{
if (typeof(DeletableEntity).IsAssignableFrom(entityType.ClrType) == true)
{
var et = entityType.BaseType;
}
}
有趣的是,ClassA的EntityType.BaseType == null,但ClrType.BaseType清楚地显示了ClassA继承自DeletableEntity:
对于ClassB entityType.BaseType是预期的ClassA:
为什么第一个后继者的父类被忽略?这是设计使然吗?
PS:我正在使用EF Core 2.2。
答案 0 :(得分:2)
这是因为基础 class 与基础实体之间存在差异。
IEntityType
代表映射为EF核心实体的类。 BaseType
的类型IEnityType
属性也是IEnityType
。但是在您的示例中,DeletableEntity
只是一个基类,而不是基实体,因此该属性返回null
。
最好的解释可能是属性声明:
//
// Summary:
// Gets the base type of the entity. Returns null if this is not a derived type
// in an inheritance hierarchy.
IEntityType BaseType { get; }
其中“继承层次结构”是指EF Inheritance:
EF模型中的继承用于控制如何在数据库中表示实体类中的继承。