Entity framework TPH鉴别器不在基类/表上

Entity framework TPH鉴别器不在基类/表上,entity-framework,ef-code-first,entity-framework-6,tph,Entity Framework,Ef Code First,Entity Framework 6,Tph,我在实体框架v6.1.1的TPH继承中遇到了一个鉴别器问题 我希望鉴别器应该落在代表基类的桌子上。但是,EF似乎正在尝试将鉴别器列映射到映射到派生类的表 例如 但是,当我尝试添加新员工时,我遇到以下例外情况: 'System.Data.SqlClient.SqlException:无法将值NULL插入表'MyDb.dbo.Person'的'PersonTypeId'列中;列不允许空值。插入失败。 该声明已终止' 它似乎正在尝试将鉴别器(错误地)插入派生表。希望有人能帮忙。看来我对实体框架的TPH

我在实体框架v6.1.1的TPH继承中遇到了一个鉴别器问题

我希望鉴别器应该落在代表基类的桌子上。但是,EF似乎正在尝试将鉴别器列映射到映射到派生类的表

例如

但是,当我尝试添加新员工时,我遇到以下例外情况:

'System.Data.SqlClient.SqlException:无法将值NULL插入表'MyDb.dbo.Person'的'PersonTypeId'列中;列不允许空值。插入失败。 该声明已终止'


它似乎正在尝试将鉴别器(错误地)插入派生表。希望有人能帮忙。

看来我对实体框架的TPH设置理解错误

在我的例子中,我想将派生类型映射到单独的表,这是每个类型的表的一个示例-


在这种情况下,鉴别器是多余的。

在一个表中使用多个表听起来很奇怪。您确定您没有尝试TPT,并且在这个cas中不需要鉴别器。对不起-仅以此为例。想象一下,如果您愿意,它将跨越多个类型(例如:Student),对任何数量的类型都有相同的注释:在TPH中,您对整个层次结构只使用一个表。[啊-你说得对-我似乎在TPT/TPH周围有交叉线。不需要鉴别器。谢谢你的帮助
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