EF Core запрашивает данные по связанным идентификаторам - PullRequest
0 голосов
/ 22 января 2019

Предположим, у меня есть два класса, которые имеют отношение многие-к-одному

public class ParentObject{
    public int Id { get; set; }
    public List<ChildObject> Children { get; set; }
    ...
}

public class ChildObject{
    public int Id { get; set; }
    public ParentObject Parent { get; set; }
}

Когда я добавляю миграцию и обновляю базу данных, в результате получаются две таблицы:

  • ParentObject
    • Id: int
    • ...
  • ChildObject
    • Id: int
    • ParentObjectId:int
    • ...

Теперь я хочу найти всех потомков определенного родителя.В SQL я могу сделать это, не подключаясь к родительской таблице, просто запросив столбец ChildObject.ParentObjectId .

SELECT * FROM [ChildObject] c WHERE c.ParentObjectId = parentId

Но в EF Core единственный способ, которым я могуя обнаружил, что для этого нужно использовать .Include(c => c.Parent), а затем .FirstOrDefault(c => c.Parent.Id == parentId).Это создает соединение с таблицей ParentObject .

Можно ли запросить таблицу ChildObject без .Include()?

1 Ответ

0 голосов
/ 22 января 2019

Просто используйте свойство навигации для доступа к родительскому ПК:

var children = db.Children
    .Where(c => c.Parent.Id == parentId)
    .ToList();

Если вы включите другое Parent свойство сущности в Where, OrderBy, Select (или само Parent внутри Select или Include), конечно, EF Core создаст объединение , Но если вы обращаетесь только к PK связанной сущности, то EF Core достаточно умен, чтобы вместо этого использовать FK и избежать объединения.

Обратите внимание, что возвращенные объекты Child не будут иметь заполненного свойства Parent (будет null), за исключением того, что контекст еще не отслеживает экземпляр объекта Parent с этим PK.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...