使用现有属性名称添加Entity Framework核心代码第一个子面板

时间:2018-09-27 19:20:24

标签: entity-framework inheritance tph

在实体框架中使用TPH继承时,在以下情况下什么是最佳/好的做法?

我有

abstract class Base
{
    ...
}

class Sub1
{
    public int Amount {get;set;}
}

和一个DbContext,其中:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.Entity<Sub1>();
}

public DbSet<Base> Bases { get; set; }

现在我添加

class Sub2
{
    public int Amount { get; set; }
}

modelBuilder.Entity<Sub2>();

在添加Sub2之前,Sub1.Amount已映射到Bases表中的“ Amount”列。添加Sub2后,Sub1.Amount映射到“ Sub1_Amount”列,Sub2.Amount映射到“ Amount”列。该表中包含数据,因此新的“ Sub1_Amount”列均为空。当我尝试运行系统时,我得到了

读取属性“ Sub1.Amount”的数据库值时发生异常。预期的类型为'System.Int32',但实际值为null。

我知道为什么会这样...但是我认为迁移可以解决这个问题。

有人知道如何处理吗?谢谢!

0 个答案:

没有答案