Code First基类的判别器

时间:2016-11-18 11:00:40

标签: c# .net entity-framework

我有两个几乎相同的表,Person和PersonArchive。你可以想象PersonArchive与Person非常相似,它只增加了两个额外的字段。我在下面创建了类结构,因此如果将另一列添加到Person,它会自动出现在PersonArchive中:

public partial class Person
{
    public int PersonId { get; set; }

    public string FirstName { get; set; }

    public string Surname { get; set; }

}

public partial class PersonArchive : Person
{

    public string ArchivedBy { get; set; }

    public DateTime ArchivedAt
    {
        get
        {
            return DateTime.Now;
        }
    }

}

我的解决方案从Person中读取数据,填写额外的两个字段并将其写入PersonArchive。问题是,当我尝试从Person中读取数据时,我得到了缺少的鉴别器问题,同时查看SO上的各个帖子,将NotMapped添加到PersonArchive解决了从Person读取的问题,但显然在插入PersonArchive时会导致问题。 / p>

我已经检查了各种帖子,但是它们似乎与我的问题不符 - 或者至少是我的理解:

Code First: Avoid discriminator column and keep inheritance

https://www.asp.net/mvc/overview/getting-started/getting-started-with-ef-using-mvc/implementing-inheritance-with-the-entity-framework-in-an-asp-net-mvc-application

Entity framework code first creates "discriminator" column

Entity Framework: How to avoid Discriminator column from table?

1 个答案:

答案 0 :(得分:0)

您应该定义另一个继承策略。 TPT - Table Per Type适用于您的情况。使用这种方法,您的活动不会有Disciriminator列。

Table Per Hierarchy是Entity Framework中的默认继承策略。还要记住,TPT继承策略是not yet available in ASP.NET Core