【问题标题】:Discriminator on Base Class on Code FirstCode First 基类的判别器
【发布时间】:2016-11-18 11:00:40
【问题描述】:

我有两个几乎相同的表,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 时会导致问题。

我查看了各种帖子,但似乎没有一个符合我的问题 - 或者至少在我的理解中:

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?

【问题讨论】:

    标签: c# .net entity-framework


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多