[英]Abstract class with EF Core Migrations
我以前曾在 DbSet 中成功使用抽象基DbSet
,然后从中继承多个类。 这意味着所有继承的类都映射到同一个表,只使用它们需要的列。 可以在这篇文章中找到更多详细信息(我也问过),但简而言之,它看起来有点像这样:
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 Core Migrations 创建它时,我收到以下错误:
实体类型“Base”的对应 CLR 类型不可实例化,并且 model 中没有派生实体类型对应于具体 CLR 类型。
其他帖子( 如this )表明我正在尝试做的事情是不可能的,并且我需要使用每个类型的表映射。 但是我已经看到它起作用了,所以它不可能在所有情况下都有效。 是否可以(不弯曲宇宙)使用抽象基础 class 和单个表,以及 EF Core Migrations?
我在Table Per Hierarchy的一篇文章中偶然发现了一个答案。 为了使 EF Core 迁移能够使用抽象类,您必须手动定义鉴别器。 所以我在 DbContext 文件的OnModelCreation()
中需要以下内容:
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<Base>()
.ToTable("Base")
.HasDiscriminator<string>("BaseType")
.HasValue<A>("A")
.HasValue<B>("B");
}
当然,您可以随意配置鉴别器,但必须明确配置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.