对于直接从基类继承的实体,为什么IMutableEntityType.BaseType为null?

时间:2019-06-01 14:32:34

标签: entity-framework asp.net-core-mvc ef-core-2.0

我定义了以下类:

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:

enter image description here

对于ClassB entityType.BaseType是预期的ClassA:

enter image description here

为什么第一个后继者的父类被忽略?这是设计使然吗?

PS:我正在使用EF Core 2.2。

1 个答案:

答案 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模型中的继承用于控制如何在数据库中表示实体类中的继承。

还有Inheritance (Relational Database)