EF Core 2.1 Выбор полей для отношения один ко многим - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть класс, которому принадлежит список сущностей:

public class Dad
{
    public long Id{get;set;}
    public string Name{get;set;}

    public string SecretName{get;set;}

    public List<Kid> Kids{get;set;}
}

public class Kid
{
    public long Id{get;set;}
    public string Name{get;set;}
    public string SecretName{get;set;}
    public Dad Dad {get;set;
}

Я пытаюсь указать, какие столбцы выбрать в Kids, которыми владеет папа:

var DadAPIResponse = _context.Dads
            .Where(o.Id == Id)
            .Select(x => new {
                Id = x.Id,
                Name = x.Name
                // Here, I need something like
                // Kids = {Id, Name}
            }).AsNoTracking()
            .FirstOrDefault();

Мое намерение состоит в том, чтобы вернуть список Пап, но только показать их Идентификатор, Имя и показать только Идентификатор и Имя каждого из Детей, принадлежащих этому Папе.

Я использую EF Core 2.1

1 Ответ

0 голосов
/ 14 декабря 2018

Вы должны отделить модель вашей сущности от модели, которую вы возвращаете, и включать только необходимые свойства каждого типа как:

public class DadModel
{
    public long Id{get;set;}
    public string Name{get;set;}
    public List<Kid> Kids{get;set;}
}

... и:

public class KidModel
{
    public long Id{get;set;}
    public string Name{get;set;}
}

Так какэта новая модель Kid не имеет ссылки на своего папу, вы также избегаете каких-либо проблем круговой ссылки.Затем вы можете выбрать детей каждого отца по:

var response = _context.Dads
            .Where(d.Id == Id)
            .Select(d => new DadModel{
                Id = d.Id,
                Name = d.Name
                Kids = d.Kids.Select(k => new KidsModel
                {
                    Id = k.Id,
                    Name = k.Name
                }).ToList()
            }).AsNoTracking()
            .FirstOrDefault();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...