使用每个类型的表继承模型和实体框架代码首先,我试图加载一个派生类列表。请注意,我无法更改模型。
我有以下模型(过度简化)
public class Training
{
public string Name { get; set; }
public IList<Person> Persons { get; set; }
}
public abstract class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
[Table("Students")]
public class Student : Person
{
public string StudentNumber { get; set; }
public IList<Training> Trainings { get; set; }
}
[Table("Instructors")]
public class Instructor : Person
{
public DateTime StartingDate { get; set; }
public IList<Training> Trainings { get; set; }
}
我想按名称查询培训并急切加载包括派生类(学生和教师)在内的所有人员。早在2011年4月,Tom Dykstra seemed to claim it wasn't possible。
当导航属性位于TPH继承结构的派生类上时,当前版本的实体框架不支持对一对一或零关系的预先加载。
这改变了吗?我正在使用EF5。
答案 0 :(得分:2)
我不明白为什么......
var list = context.Trainings.Include(t => t.Persons)
.Where(t => t.Name == someName)
.ToList();
......不应该工作。 EF应使用具体的Persons
和Student
实体填充Instructor
列表。
您既没有&#34; 一对一或一对一关系&#34;也不是导出类的导航属性(Training.Persons
)&#34; &#34;。所以,我认为上述限制不适用于您的模型和查询。