为什么 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 entity。 IEnityType
的类型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.
我定义了以下 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 entity。 IEnityType
的类型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.