gpt4 book ai didi

c# - EF Core 通过相关 ID 查询数据

转载 作者:太空宇宙 更新时间:2023-11-03 20:51:59 25 4
gpt4 key购买 nike

假设我有两个具有多对一关系的类

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; }
}

当我添加迁移并更新数据库时,结果是两个表:

  • 父对象
    • ID : 整数
    • ...
  • 子对象
    • ID : 整数
    • ParentObjectId : 整数
    • ...

现在我想搜索特定 parent 的所有 child 。在 SQL 中,我无需加入父表即可执行此操作,只需查询 ChildObject.ParentObjectId 列即可。

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

但在 EF Core 中,我发现执行此操作的唯一方法是使用 .Include(c => c.Parent) 然后使用 .FirstOrDefault(c => c .Parent.Id == parentId)。这会创建一个到 ParentObject 表的连接。

有没有办法不用 .Include() 查询 ChildObject 表?

最佳答案

只需使用导航属性访问父 PK:

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

如果您在 WhereOrderBySelect(或 Parent 本身在 SelectInclude 中),当然 EF Core 会创建一个连接。但是,如果您只访问相关实体的 PK,那么 EF Core 足够聪明,可以改用 FK 并避免连接。

请注意,返回的 Child 对象不会填充 Parent 属性(将为 null),除非上下文尚未跟踪具有该 PK 的 Parent 实体实例。

关于c# - EF Core 通过相关 ID 查询数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54314349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com