Entity framework 实体框架6每个层次结构表(TPH)缺陷

Entity framework 实体框架6每个层次结构表(TPH)缺陷,entity-framework,ef-code-first,table-per-hierarchy,Entity Framework,Ef Code First,Table Per Hierarchy,我创建了一个具有一些基本属性的抽象类: public abstract class BaseModel { public BaseWishModel() { } [Key] public int Id { get; set; } public virtual string Title { get; set; } public bool IsPublished { get; set; } public bool IsSpam {

我创建了一个具有一些基本属性的抽象类:

public abstract class BaseModel
{
    public BaseWishModel()
    {
    }

    [Key]
    public int Id { get; set; }

    public virtual string Title { get; set; }

    public bool IsPublished { get; set; }
    public bool IsSpam { get; set; }
}
我的项目类别:

public class PrivateItem : BaseModel
{
    [NotMapped]
    public string PurposesIds { get; set; }
}
我的onmodel创建方法:

  modelBuilder.Entity<BaseModel>()
             .Map<PrivateItem>(r => r.Requires("Discriminator").HasValue((int)Enums.Type.Private))
             .ToTable("Items");

我不知道为什么它会生成ShortDescription1和ShortDescription1,因为根据您的评论,您有其他继承自BaseModel的类,并且在没有其他配置的情况下,EF默认使用

基本上,这将为所有类层次结构生成一个表

当一个类的插入完成时,层次结构的所有类都会持久化在同一个表中,因此(层次结构的)所有列都会被填充。类列未使用的字段由null或默认值填充


这将在插入查询中引入ShortDescription1和ShortDescription2。

是的,我有。这是一个映射`modelBuilder.Entity().Map(r=>r.Requires(“鉴别器”).HasValue((int)Enums.Type.Private)).Map(r=>r.Requires(“鉴别器”).HasValue((int)Enums.Type.Public”).Map(r=>r.Requires(“鉴别器”).HasValue((int)Enums.Type.Other)).ToTable(“项”);`我只提交了一个特定类的插入。为什么会发生这种情况?堆栈溢出允许您随时更新问题。请使用相关代码更新您的问题,这样其他阅读您问题的人就不必阅读所有注释来理解完整的问题(并允许将代码格式化以便于阅读)。我正在尝试将我的所有类指向同一个表。根据实体框架指南,我可以创建鉴别器来区分映射到同一个表的类。很抱歉,混淆了,但我已经创建了鉴别器属性,但仍然得到了错误。你能给我一个正确实现我的请求的示例吗?
INSERT [dbo].[Items]([Title], [IsPublished], [ShortDescription1], [ShortDescription2], [Discriminator])