实体框架6每个层次结构表(TPH)错误

时间:2014-07-23 12:51:46

标签: 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 { get; set; }
}

我的项目类:

public class PrivateItem : BaseModel
{
    [NotMapped]
    public string PurposesIds { get; set; }
}

我的OnModelCreating方法:

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

当我保存数据时,它会生成下一个sql:

INSERT [dbo].[Items]([Title], [IsPublished], [ShortDescription1], [ShortDescription2], [Discriminator])

我不知道它为什么会生成ShortDescription1和ShortDescription1

1 个答案:

答案 0 :(得分:0)

根据您的评论,您有其他继承自BaseModel的类,并且没有其他配置,EF默认使用TPH

基本上,这会导致所有类层次结构的单个表。

当一个类的插入完成时,层次结构的所有类都保存在同一个表中,所有列(层次结构)都被填充。类列的非填充值由null或默认值填充。

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