0

Я пытаюсь использовать метод Table per Type для наследования с EF Code First. Моя реальная структура s, как это:Наследование с EF-кодом First-Table per Type (TPT)

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?

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

+1

Все '' Employee' являются Person', но не все 'Person' являются' Employee'. – DavidG

+0

То же самое, что все 'бананы'' 'Fruit', но не все' Fruit' являются 'бананами'. – DavidG

+0

Да. Это верно. Но некоторые люди являются сотрудниками. Должен иметь возможность узнать, могу ли я получить доступ к модели сотрудника от человека. Мне нравится objEmployee.Person! = Null? ((objEmployee) Лицо) .Name: string.Empty; Что-то вроде этого – BernardoMorais

ответ

0

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

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

var obj2 = new Person(); 
string b; 

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

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

+1

Спасибо. Этот способ работает отлично. – BernardoMorais

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

  • Нет связанных вопросов^_^