.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。