C# Ef Core 3实体类型XOrder无法映射到表,因为它是从订单派生的,只有基本实体类型才能映射到表

C# Ef Core 3实体类型XOrder无法映射到表,因为它是从订单派生的,只有基本实体类型才能映射到表,c#,entity-framework,asp.net-core,.net-core,ef-core-3.0,C#,Entity Framework,Asp.net Core,.net Core,Ef Core 3.0,问题:我们有一些继承类型的订单实体,例如:OnlineOrder、OfflineOrder 基于和在ef core 3ToTable()中引发异常,因为(基于断开更改链接): 从EF Core 3.0开始,准备添加TPT和TPC 在以后的版本中,将支持对派生类型调用的ToTable() 现在抛出一个异常,以避免在 未来 因此,我们更改配置类: public virtual void Configure(EntityTypeBuilder<TEntity> builder) {

问题:我们有一些继承类型的订单实体,例如:OnlineOrder、OfflineOrder

基于和在ef core 3
ToTable()
中引发异常,因为(基于断开更改链接):

从EF Core 3.0开始,准备添加TPT和TPC 在以后的版本中,将支持对派生类型调用的
ToTable()
现在抛出一个异常,以避免在 未来

因此,我们更改配置类:

public virtual void Configure(EntityTypeBuilder<TEntity> builder)
{
    if (typeof(TEntity).BaseType == null)
        builder.ToTable(typeof(TEntity).Name, Schema);
}
公共虚拟空间配置(EntityTypeBuilder)
{
if(typeof(tenty).BaseType==null)
ToTable(typeof(tenty).Name,Schema);
}

我通过调用modelBuilder.Entity().ToTable(null)暂时解决了这个问题

另一个原因是对子实体(从另一个实体继承)使用
SetTableName
。请参见

那么,您知道EF Core 3.0(或者在我的例子中是3.1.1)是否支持TPT和TPC吗?基于我目前的问题,情况似乎并非如此。EF Core仅支持TPH(每个层次结构的表)。TPT支持是EF Core 5.0()计划的一个主要功能。这不是一个解决方案,而是一个黑客/解决方法,请不要这样做。
public virtual void Configure(EntityTypeBuilder<TEntity> builder)
{
    builder.ToTable(typeof(TEntity).Name, Schema);
}
The entity type 'OffineOrder' cannot be mapped to a table because it is derived from 'Order'. Only base entity types can be mapped to a table.
public virtual void Configure(EntityTypeBuilder<TEntity> builder)
{
    if (typeof(TEntity).BaseType == null)
        builder.ToTable(typeof(TEntity).Name, Schema);
}