[英]Entity Framework 6.1 Code First TPH/TPT hybrid mapping issue
我有一个模型,其中大多数实体都继承相同的基本功能。 该功能封装在抽象基类中。 除此之外,还有两个功能分支,因此有两个抽象类从抽象基类继承。 此时,具体类从其各自的中间抽象类继承。
以下是这种模型模型的一个分支的类和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行:表Concrete中的列Concrete.Concrete1Integer必须映射:它没有默认值,并且不能为空。
我已经尝试了几种排列方式-
Intermediate
映射到自定义表,但是将具体类型的字段映射到“基础”表。 Intermediate
映射到其自己的表,将Concrete1
和Concrete2
映射到名为“ Concretes”的表-与上述代码示例中的原始映射完全相同。 在代码示例中,没有某种方法可以获取我正在寻找的映射吗? 也就是说,使用区分符的“基本”表和“具体”表?
从Entity Framework 6.1.0版本开始,这是一个突出的错误。 听起来这也将是6.1.1中的错误,但已计划在6.1.2中进行修复。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.