【发布时间】:2012-08-29 22:14:03
【问题描述】:
考虑以下具有 TPT 继承的实体框架模型。
数据库表:
Person (PersonID, Name)
Student (PersonID, Grade)
EF 实体:
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 对象?这不是违反直觉吗?
【问题讨论】:
标签: c# .net linq entity-framework linq-to-entities