2013-08-12 8 views
4

Я хочу, чтобы все контактные лица (в том числе лица -> Сотрудники)нагрузки навигации свойство от унаследованного класса

Contact 
|<- Person 
| |-> Employer 
| 
|<- Organization 
| |-> Employees 

Человек и организация наследует от Контакта.

Когда я использую FirstOrDefault, мои сотрудники и мой работодатель не были загружены.

public Contact GetContactById(int id) 
{ 
    var contact = GetContacts().FirstOrDefault(c => c.Id == id); 
    return contact; 
} 

private IQueryable<Contact> GetContacts() 
{ 
    var contacts = _contextProvider.Context.Contacts 
     .Include("Addresses"); 

    return contacts; 
} 

Это мой текущий обходной путь:

public Contact GetContactById(int id) 
{ 
    var contact = GetContacts().FirstOrDefault(c => c.Id == id); 
    if (contact is Organization) 
    { 
     var organization = contact as Organization; 
     _contextProvider.Context.Entry(organization).Collection(o => o.Employees).Load(); 
    } 
    else if (contact is Person) 
    { 
     var person = contact as Person; 
     _contextProvider.Context.Entry(person).Reference(o => o.Employer).Load(); 
    } 
    return contact; 
} 

Есть ли лучший способ решить эту проблему?

+0

что стратегия наследования - TPH, TPT, TPC? – Moho

+0

Стратегия наследования - это TPT. – user2491336

ответ

4

я не могу проверить это, но возможный толчок в правильном направлении может быть

private IQueryable<Contact> GetContacts() 
{ 
    var people = _contextProvider.Context.Contacts 
     .OfType<Person>() 
     .Include("Employer"); 

    var organizations = _contextProvider.Context.Contacts 
     .OfType<Organization>() 
     .Include("Employees"); 

    return people.Concat<Contact>(organizations); 
} 

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

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