我有这些课程:
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
}
Entity Framework自动在数据库中创建一个名为“ Discriminator”的列:这意味着,如果我创建一个新的SogCrm(例如,Id = 3),则此对象将永远是SogCrm。因此,如果我想获取SogWms而不是SogCrm,则无法读取Id = 3的对象,因为它被标记为SogCrm。
因此,我添加了2个布尔列而不是Discriminator: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 });
}
有什么想法吗?