我有一个模型,其中大多数实体继承相同的基本功能。该功能封装在抽象基类中。在此之上,有两个功能分支,因此有两个从抽象基类继承的抽象类。此时,具体类继承自各自的中间抽象类。
以下是此类模型模型的一个分支的类和EF映射的示例:
public class TestContext : DbContext
{
public DbSet<Base> Bases { get; set; }
public DbSet<Intermediate> Intermediates { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Intermediate>().ToTable("Concretes");
modelBuilder.Entity<Concrete1>().ToTable("Concretes");
modelBuilder.Entity<Concrete2>().ToTable("Concretes");
}
}
public abstract class Base
{
public int Id { get; set; }
public string BaseString { get; set; }
public int BaseInteger { get; set; }
}
public abstract class Intermediate : Base
{
public string IntermediateString { get; set; }
public int IntermediateInteger { get; set; }
}
public class Concrete1 : Intermediate
{
public string Concrete1String { get; set; }
public int Concrete1Integer { get; set; }
}
public class Concrete2 : Intermediate
{
public string Concrete2String { get; set; }
public int Concrete2Integer { get; set; }
}
我遇到问题的地方是表格映射。虽然映射Intermediate
,Concrete1
和Concrete2
确实生成了一个数据库 - 甚至给了我一个鉴别器列 - 但它并没有像TPH映射所需的那样使列可以为空,因此我结束了以及以下异常消息:
(28,10):错误3023:从第28行开始映射片段时出现问题:表中的Concretes.Concrete1Integer列必须映射Concretes:它没有默认值且不可为空。
我已尝试了几种这种排列 -
Intermediate
映射到自定义表格,但具体类型为&#39;字段映射到&#34; Bases&#34;表Intermediate
映射到自己的表格和Concrete1
&amp; Concrete2
到一个名为&#34; Concretes&#34;的表 - 与上面代码示例中的原始映射完全相同的问题。有没有办法在代码示例中找到我正在寻找的映射?也就是说,&#34; Bases&#34;桌子和#34;混凝土&#34;使用鉴别器的表?
答案 0 :(得分:2)
从版本Entity Framework 6.1.0开始,这是一个突出的错误。听起来它也是6.1.1中的一个错误,但是a fix has been scheduled for 6.1.2.