【发布时间】:2020-07-13 20:19:45
【问题描述】:
我之前在DbSet 中成功使用了抽象基类,然后从中继承了多个类。这意味着所有继承的类都映射到同一个表,只使用它们需要的列。更多细节可以在this post(也是我问的)中找到,但总之看起来有点像这样:
public abstract class Base
{
public int Id { get; set; }
public DateTime CreatedDtm { get; set; }
}
public class A : Base
{
public string PhoneNo { get; set; }
}
public class B : Base
{
public string EmailAddress { get; set; }
}
public DbSet<Base> Bases { get; set; }
用于这两个类的表将具有以下列:
- 鉴别器 - 由 EF 添加以跟踪它是什么类型的类(A 或 B)
- Id(两个类都使用)
- CreatedDtm(两个类都使用)
- PhoneNo(仅由 A 使用,因此对于 B 始终为 null)
- EmailAddress(PhoneNo 的对面)
当我自己创建表时它可以工作。但是当我尝试通过 EF Core Migrations 创建它时,我收到以下错误:
实体类型“Base”对应的 CLR 类型不可实例化,并且模型中没有派生实体类型对应于具体的 CLR 类型。
其他帖子 (like this) 表明我正在尝试做的事情是不可能的,我需要使用 Table-per-Type 映射。但我已经看到它起作用了,所以它不可能在所有情况下都有效。是否可以(不扭曲宇宙)使用抽象基类和单个表以及 EF Core 迁移?
【问题讨论】:
标签: c# entity-framework entity-framework-core