1

Использование модели наследования типа на основе типа и кода Entity Framework Сначала я пытаюсь загрузить список производного класса. Обратите внимание, что я не могу изменить модель.Entity Framework Eager Загрузка класса наследуемого типа наследуемого класса

У меня есть следующие модели (чрезмерно упрощенные)

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; } 
} 

Я хочу запросить обучение по имени и нетерпеливой нагрузкой все лицам, в том числе производного класса (Student и инструктора). Еще в апреле 2011 года Том Дыкстра seemed to claim it wasn't possible.

Текущая версия Entity Framework не поддерживает загрузку для отношений «один к нулю», когда свойство навигации относится к производному классу структуры наследования TPH.

Изменилось? Я использую EF5.

ответ

2

Я не понимаю, почему ...

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

... не должен работать. EF должен заполнить список Persons бетоном Student и Instructor объектов.

Вы ни есть «один в ноль или один-отношения» и не является вашей собственностью навигации (Training.Persons) «на производный класс». Итак, я думаю, что указанное ограничение не распространяется на вашу модель и запрос.

+0

Я думаю, что подразумевалось под навигационным свойством на производном классе: IList Тренировки (которые я забыл добавить в свой вопрос изначально) находятся внутри класса инструктора и ученика вместо класса Person. Разве связь между Лицом и Инструктором/Студентом не имеет отношения «один к нулю» ?? –

+0

Что касается Include, я предположил, что вам абсолютно необходимо включать классы Student & Instructor для получения данных, которые могут быть загружены по какой-либо причине. Оно работает. Благодаря! –

+0

@ Nick-ACNB: Да, это отношение один к нулю или один на уровне схемы базы данных. Но это не явное отношение для EF со ссылочным навигационным свойством (оно каким-то образом «скрыто» в сопоставлении TPT). Я думаю, что упомянутое ограничение означает только такие явные отношения. – Slauma

Смежные вопросы