У меня возникла проблема с поддержанием отношений в производных типах и запросом их с помощью LINQ. Пожалуйста, рассмотрите следующий сценарий. Допустим, у меня есть следующая иерархия:
public class Company
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
}
public abstract class Document
{
public int Id { get; set; }
public string DocType { get; set; }
public string Name { get; set; }
}
public class CompanyDoc : Document
{
public int CompanyId { get; set; }
public Company Company { get; set; }
}
public class PersonDoc : Document
{
public int PersonId { get; set; }
public Person Person { get; set; }
}
Это означает, что у меня есть объект документа, и владельцем документа может быть любая компания или любое лицо, поэтому я создаю 2 производных документа company doc & person doc.
У меня вопрос: можно ли поддерживать такие отношения, если нет, то как лучше всего поддерживать такую иерархию?
В ядре 2.1 я могу справиться с этой иерархией, используя TPH. Но если я хочу получить весь документ вместе с владельцем, каким будет запрос linq. Я пробовал с ниже одного, но он не работает.
var doc = (from d in _context.Set<Document>()
join c in _context.Company on (d as CompanyDoc).CompanyId equals c.Id into cd
from cdoc in cd.DefaultIfEmpty()
join c in _context.Person on (d as PersonDoc).PersonId equals c.Id into pd
from pdoc in pd.DefaultIfEmpty()
select new {
d.Id,
d.Name,
Owner = cdoc.Name != null ? cdoc.Name : pdoc.Name
}).ToList()
Не могли бы вы помочь мне, поделившись своими мыслями. Пожалуйста, примите это как гипотетический пример.