实体框架渴望加载Table-Per-Type继承派生类

时间:2013-07-05 13:46:37

标签: entity-framework ef-code-first entity-framework-5 table-per-type

使用每个类型的表继承模型和实体框架代码首先,我试图加载一个派生类列表。请注意,我无法更改模型。

我有以下模型(过度简化)

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。

1 个答案:

答案 0 :(得分:2)

我不明白为什么......

var list = context.Trainings.Include(t => t.Persons)
    .Where(t => t.Name == someName)
    .ToList();

......不应该工作。 EF应使用具体的PersonsStudent实体填充Instructor列表。

您既没有&#34; 一对一或一对一关系&#34;也不是导出类的导航属性(Training.Persons)&#34; &#34;。所以,我认为上述限制不适用于您的模型和查询。