为什么 IMutableEntityType.BaseType 对于直接从基础 class 继承的实体为空?

Why IMutableEntityType.BaseType is null for entities that inherit directly from a base class?

我定义了以下 classes:

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:

:

对于 B 类 entityType.BaseType 是预期的 A 类:

为什么第一个继承人的 parent class 被忽略了?这是设计使然吗?

PS:我正在使用 EF Core 2.2。

因为base class和base entity.

有区别

IEntityType 表示 class 映射为 EF Core entityIEnityType的类型BaseType属性也是IEnityType。但是在你的例子中 DeletableEntity 只是一个基础 class,而不是基础实体,所以 属性 returns 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; }

其中 "inheritance hierarchy" 指的是 EF Inheritance:

Inheritance in the EF model is used to control how inheritance in the entity classes is represented in the database.

还有Inheritance (Relational Database).