You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Entity Framework从Cosmos Db查询带Book子文档的Author实体数据

问题原因

EF Core 操作 Cosmos DB 时默认不会自动加载导航属性,你当前直接查询 Authors 数据集只会拉取所有 Author 类型的独立文档,不会自动关联查询对应的 Book 文档,所以 Books 集合为空。

解决方案

你可以根据自己的业务场景选择以下任意一种方式解决:

  • 方案1:使用 Include 预加载关联属性(推荐,适合 Author 和 Book 都需要作为独立文档查询的场景)
    只需要在查询 Authors 时加上 Include 指定要加载的关联导航属性即可,调整后的查询代码如下:

    using (var context = new BookStoreDbContext())
    {
        // 加Include预加载Books集合
        var list = context.Authors.Include(a => a.Books).ToList();
    
        foreach (var author in list)
        {
            Console.WriteLine(author.FirstName + " " + author.LastName);
    
            foreach (var book in author.Books)
            {
                Console.WriteLine("\t" + book.Title);
            }
        }
    }
    

    注意:该特性需要 EF Core 3.0 及以上版本支持,同时确保你的 Book 实体正确配置了指向 Author 的外键关联。

  • 方案2:配置 Book 为 Author 的从属实体,嵌套存储(适合不需要单独查询 Book 的场景)
    如果你不需要把 Book 作为独立文档查询,可以在 DbContext 的 OnModelCreating 方法中配置 Book 是 Author 的从属集合,这样数据写入时会直接把 Books 作为嵌套数组存到同一个 Author 文档里,查询时不需要加 Include 也能自动获取到 Books 数据,配置代码如下:

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Author>()
            .OwnsMany(a => a.Books);
    }
    

内容的提问来源于stack exchange,提问作者coolblue2000

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 22:30:00