0

У меня есть следующие модели (чрезмерно упрощенные)Entity Framework Code First 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». Я хотел бы знать, можно ли также получить указанное лицо в списке лиц, и если да, то как?

Update

Реальная причина, почему я задаю этот вопрос, потому что у меня есть 39 отчетливый производный класс и запрос построен Ер действительно медленно по очевидным причинам. Я пытаюсь получить с первоначальным запросом только несколько наиболее распространенных случаев и, если необходимо, получить другие случаи отдельно с помощью IN (EF Contains) с использованием базового класса.

Ответ

Ответ был удалить "абстрактный" ключевое слово из класса Base (Person).

+0

любую причину downvote ? это кажется мне совершенно правильным вопросом –

ответ

2

Ответ удалить абстрактную ключевое слово из базового класса (Person):

ОТ:

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; } 
    } 
Смежные вопросы