实体框架代码第一个表每类型继承包括基类型
本文关键字:类型 继承 包括基 框架 代码 第一个 实体 | 更新日期: 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; }
}