考虑以下具有 TPT 继承的实体框架模型。
数据库表:
Person (PersonID, Name)
Student (PersonID, Grade)
英孚实体:
Person (PersonID, Name)
Student (Grade) : inherits from Person
现在,当您尝试从数据库中选择人员条目时,它将返回 Student 类型。
var person = db.Persons.First();
// person here is of type Student and has Grade peoperty populated
// SQL query generated by EF selects data from both tables with a JOIN
如何强制此查询仅从 Person db 表中选择数据,而不是从 Person 和 Student db 表中选择数据?
例如,可以使用以下查询来完成:
db.Persons.Select(x => new Person { PersonID = x.PersonID, Name = x.Name }).First()
但它看起来很蹩脚,在现有查询上生成一个额外的 SELECT 语句,这样返回的 Person 实体对象将不会被 EF 上下文跟踪。所以,我想知道为什么要db.Persons.First()
返回一个Student
对象?这不是违反直觉吗?