实体框架代码First Table-Per-Type继承包括基本类型

时间:2013-07-15 19:12:40

标签: c# .net-4.0 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; }

    public Training Training { 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; }
}

我想使用培训名称查询数据库:

var training = _trainingRepository.FindByName("training class 1", include => include.Persons);

查询数据库并包含所有学生和教师。

问题:

假设我有一个既不是学生也不是教练的人,但他是“培训班1”的一部分。 我想知道是否有可能将这个人列入人员名单,如果是这样的话?

更新

我提出这个问题的真正原因是因为我有39个不同的派生类,并且由于显而易见的原因,由EF构建的查询真的慢。我试图在初始查询中仅使用少数最常见的情况,并在必要时使用基类在IN(EF Contains)中单独获取其他情况。

答案

答案是从Base类(Person)中删除“abstract”关键字。

1 个答案:

答案 0 :(得分:2)

答案是从Base类(Person)中删除abstract关键字:

发件人:

    public abstract class Person
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }

        public Training Training { get; set; }
    }

    public class Person
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }

        public Training Training { get; set; }
    }