实体框架代码第一个表每类型继承包括基类型

本文关键字:类型 继承 包括基 框架 代码 第一个 实体 | 更新日期: 2023-09-27 18:22:41

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

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)单独获得其他情况。

回答

答案是从基类(Person)中删除"abstract"关键字。

实体框架代码第一个表每类型继承包括基类型

答案是从基类(Person)中删除抽象关键字:

FROM:

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

TO:

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