Загружать / явно загружать «дочерние» объекты, имеющие только свойство навигации, в «родительский» - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть модель EF Core 2.1 Code First с отношением типа «родитель-ребенок» между двумя классами:

class Parent
{
    public int Id {get; set;}
    public string Name {get; set;}
}

class Child
{
    public int Id {get; set;}
    public string Description { get; set; }
    public Parent Parent { get; set; }
}

Я хочу загрузить определенного Родителя и убедиться, что все его дочерние объекты также загружены. Однако у Child нет свойства навигации, и я не могу изменить классы, поэтому не могу добавить его.

dbContext.Parents
    .Include(p => p.???)
    .Find(1);

Полагаю, я мог бы сделать второй запрос, где я смотрю в обратном порядке:

dbContext.Children.Where(c => c.Parent.Id == loadedParent.Id)

но это не кажется очень эффективным, особенно когда вы загружаете нескольких родителей и делаете что-то ужасное, как это:

var parentIds = loadedParents.Select(p => p.Id);
var children = dbContext.Children.Where(c => parentIds.Contains(c.Parent.Id));

Есть ли способ убедиться, что сущности загружаются, когда у вас есть только свойство навигации "дочерний к родителю"?

1 Ответ

0 голосов
/ 06 ноября 2018

убедитесь, что все его дочерние объекты тоже загружены

Итак, загрузите Child сущностей:

var children = dbContext.Children.Include(c => c.Parent)
    .Where(c => c.Parent.Id == 1).ToList();

Или используйте более широкий критерий отбора, чем c.Parent.Id == 1, если хотите получить нескольких родителей.

При необходимости вы можете просмотреть список загруженных родителей, открыв коллекцию Local:

va parents = dbContext.Parents.Local;
...