我在使用 Entity Framework v6.1.1 继承 TPH 时遇到鉴别器问题
我希望鉴别器应该落在代表基类的表上。但是,似乎 EF 正在尝试将鉴别器列映射到映射到派生类的表
例如
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Staff : Person
{
public decimal? Salary { get; set; }
}
public class MyContext : DbContext
{
public MyContext()
: base("MyConnectionString") {}
public virtual IDbSet<Person> Persons { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Person>()
.Map(x => x.ToTable("Person"))
.Map<Staff>(x => x.ToTable("Staff").Requires("PersonTypeId").HasValue(1));
}
}
我也在使用现有的模式 - 即:
CREATE TABLE Person
(
Id INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
Name VARCHAR(50) NULL,
PersonTypeId INT NOT NULL
)
CREATE TABLE Staff
(
Id INT NOT NULL REFERENCES Person(Id),
Salary DECIMAL NULL
)
GO
但是,当我尝试添加新员工时,遇到以下异常:
'System.Data.SqlClient.SqlException:无法将值 NULL 插入到列 'PersonTypeId'、表 'MyDb.dbo.Person' 中;列不允许空值。插入失败。该语句已终止'
它似乎正在尝试将鉴别器(错误地)插入派生表。希望有人可以提供帮助。