Наследование с EF Code First — таблица по типу (TPT)

Я пытаюсь использовать подход Table per Type для наследования с помощью EF Code First. Моя фактическая структура выглядит следующим образом:

public partial class Person
{
    public int ID {get; set;}
    public string Name { get; set; }
}

public partial class Employee : Person
{
    public int ID { get; set; }
    public string Document{ get; set; }
}

С этой структурой, например, я могу сделать это:

var obj = new Employee();
string a = obj.Name;   <--- The property Name is from Person model

Однако невозможно сделать такое отношение обратным образом (как это было сделано в LINQ):

var obj2 = new Person();
string b = obj2.Person.Document;    <--- It cannot resolve 'Person' symbol

Есть ли способ получить доступ к модели Person из объекта Employee?

Заранее спасибо.


person BernardoMorais    schedule 22.10.2014    source источник
comment
Все Employee являются Person, но не все Person являются Employee.   -  person DavidG    schedule 22.10.2014
comment
Точно так же все Banana являются Fruit, но не все Fruit являются Banana.   -  person DavidG    schedule 22.10.2014
comment
Да. Это верно. Но некоторые лица являются наемными работниками. Должен быть способ узнать, могу ли я получить доступ к модели сотрудника от человека. Например, objEmployee.Person != null ? ((objEmployee)Person).Name : string.Empty; Что-то подобное   -  person BernardoMorais    schedule 22.10.2014


Ответы (1)


Как уже упоминалось в комментариях, человек не является сотрудником и не может получить доступ к свойствам сотрудника. Вы можете использовать оператор «как», который преобразует человека в объект сотрудника, если это сотрудник, если это не сотрудник, он будет нулевым.

Надеемся, что следующее поможет вам в правильном направлении:

var obj2 = new Person();
string b;

var employee = obj2 as Employee;
if (employee != null)
{
    b = obj2.Person.Document;
}

В этом случае Person никогда не будет сотрудником, потому что он создан непосредственно перед

person Matt Sanders    schedule 22.10.2014