.net core efcore中的TPH继承问题

.net core efcore中的TPH继承问题,.net-core,entity-framework-core,asp.net-core-2.2,.net Core,Entity Framework Core,Asp.net Core 2.2,我有以下课程: public class Sog { public Int32 Id { get; set; } = 0; public Boolean FlagCrm { get; set; } = false; public Boolean FlagWms { get; set; } = false; } public class SogCrm : Sog { //Properties of SogCrm } public class SogWms : Sog

我有以下课程:

public class Sog
{
    public Int32 Id { get; set; } = 0;
    public Boolean FlagCrm { get; set; } = false;
    public Boolean FlagWms { get; set; } = false;
}
public class SogCrm : Sog
{
    //Properties of SogCrm
}
public class SogWms : Sog
{
    //Properties of SogWms
}
实体框架在数据库中自动创建一个名为“Discriminator”的列:这意味着如果我创建一个新的SogCrm(例如,Id=3),这个对象将永远是SogCrm。因此,如果我想获取SogWms而不是SogCrm,我无法读取Id=3的对象,因为它被标记为SogCrm

因此,我添加了2个布尔列而不是鉴别器:FlagCrm和FlagWms;如果对象的FlagCrm=true,则可以将其检索为SogCrm,如果同一对象的FlagWms=true,则最终也可以将其检索为SogWms。 这比单个鉴别器列更灵活,但以下代码不起作用:

protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Sog>()
            .HasDiscriminator(x => new { crm = x.FlagCrm, wms = x.FlagWms })
            .HasValue<Sog>(new { crm = false, wms = false })
            .HasValue<SogCrm>(new { crm = true, wms = false })
            .HasValue<SogWms>(new { crm = false, wms = true });
    }
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
modelBuilder.Entity()
.HasDiscriminator(x=>new{crm=x.FlagCrm,wms=x.FlagWms})
.HasValue(新的{crm=false,wms=false})
.HasValue(新的{crm=true,wms=false})
.HasValue(新的{crm=false,wms=true});
}

有什么想法吗?

有什么想法吗?是,从代码中删除子类型。如果两者都可以,那就不是他们的身份(“是”),所以没有继承的基础。如果它们可以根据标志值具有不同的行为,则使用运行时行为OO模式之一,例如strategy.Idea?是,从代码中删除子类型。如果两者都可以,那就不是他们的身份(“是”),所以没有继承的基础。如果它们可以根据标志值具有不同的行为,则使用运行时行为OO模式之一,例如strategy。