实体框架6表每层次(TPH)的错误



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

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

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

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

当对一个类执行插入操作时,由于层次结构的所有类都持久化在同一个表中,因此填充(层次结构的)所有列。非类列使用null或默认值填充。

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

最新更新