使用每类型表继承模型和实体框架代码优先,我正试图加载派生类的列表。请注意,我不能更改型号。
我有以下型号(过于简化)
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; }
}
我想按名称查询Training,并加载所有人员,包括派生类(学生和讲师)。2011年4月,Tom Dykstra似乎声称这是不可能的。
当导航属性位于TPH继承结构的派生类上时,当前版本的实体框架不支持急于加载一对零或一关系。
这种情况改变了吗?我正在使用EF5。
我不明白为什么。。。
var list = context.Trainings.Include(t => t.Persons)
.Where(t => t.Name == someName)
.ToList();
不应该工作。EF应该用具体的Student
和Instructor
实体填充Persons
列表。
您既没有"一对零或一关系",也没有您的导航属性(Training.Persons
)"on the derived class(派生类上的)"。因此,我认为上述限制不适用于您的模型和查询。