实体框架渴望加载每类型继承派生类的表



使用每类型表继承模型和实体框架代码优先,我正试图加载派生类的列表。请注意,我不能更改型号。

我有以下型号(过于简化)

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应该用具体的StudentInstructor实体填充Persons列表。

您既没有"一对零或一关系",也没有您的导航属性(Training.Persons)"on the derived class(派生类上的)"。因此,我认为上述限制不适用于您的模型和查询。

最新更新