efcore中的TPH继承问题

时间:2019-07-27 12:09:39

标签: .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
{
    //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 });
    }

有什么想法吗?

0 个答案:

没有答案