Include多表查询

embedded/2025/2/14 2:28:12/

DeepSeek

在 C# 中,Include 方法通常用于 Entity Framework (EF)Entity Framework Core 中,用于 预先加载相关数据(Eager Loading)。它的主要作用是在查询数据库时,将关联的实体数据一并加载到内存中,避免后续使用时触发额外的数据库查询(即延迟加载,Lazy Loading)。


1. 是什么?

Include 是 EF 和 EF Core 提供的一个方法,用于在查询主实体时,显式加载其关联的导航属性。例如:

  • 查询 Order 时,同时加载与之关联的 OrderDetails
  • 查询 User 时,同时加载与之关联的 Address

2. 为什么?

使用 Include 的主要目的是 优化数据库查询性能,避免 N+1 查询问题

  • N+1 查询问题
    如果不使用 Include,查询主实体后,访问每个实体的导航属性时会触发额外的数据库查询。例如:

    var orders = context.Orders.ToList(); // 1 次查询
    foreach (var order in orders)
    {var details = order.OrderDetails.ToList(); // N 次查询
    }
    

    这样会导致 1 次主查询 + N 次关联查询,性能较差。

  • 使用 Include 的优化
    通过 Include 预先加载关联数据,可以将主查询和关联查询合并为一次查询,减少数据库访问次数。


3. 怎么做?

基本用法
  1. 单层关联加载
    加载主实体及其直接关联的导航属性:

    using (var context = new MyDbContext())
    {var orders = context.Orders.Include(o => o.OrderDetails) // 加载 OrderDetails.ToList();
    }
    
  2. 多层关联加载
    加载多级关联的导航属性,使用 ThenInclude

    using (var context = new MyDbContext())
    {var orders = context.Orders.Include(o => o.OrderDetails) // 加载 OrderDetails.ThenInclude(od => od.Product) // 加载 OrderDetails 关联的 Product.ToList();
    }
    
  3. 加载多个关联属性
    如果需要加载多个导航属性,可以链式调用 Include

    using (var context = new MyDbContext())
    {var users = context.Users.Include(u => u.Address) // 加载 Address.Include(u => u.Orders)  // 加载 Orders.ToList()

http://www.ppmy.cn/embedded/162029.html

相关文章

数据结构与算法之排序算法-插入排序

排序算法是数据结构与算法中最基本的算法之一,其作用就是将一些可以比较大小的数据进行有规律的排序,而想要实现这种排序就拥有很多种方法~ 那么我将通过几篇文章,将排序算法中各种算法细化的,详尽的为大家呈现出来: &…

【腾讯地图】录入经纬度功能 - 支持地图选点

目录 效果展示代码引入地图服务地址弹框中输入框 - 支持手动输入经纬度/地图选点按钮地图选点弹框组件 当前文章 - 地图功能与 https://blog.csdn.net/m0_53562074/article/details/143677335 功能类似 效果展示 代码 引入地图服务地址 public/index.html <!-- 互联网地图…

拯救者Y9000P双系统ubuntu22.04安装4070显卡驱动

拯救者Y9000P双系统ubuntu22.04安装4070显卡驱动 1. 前情&#xff1a; 1TB的硬盘&#xff0c;分了120G作ubuntu22.04。/boot: 300MB, / : 40GB, /home: 75G, 其余作swap area。 2. 一开始按这个教程&#xff1a;对我无效 https://blog.csdn.net/Eric_xkk/article/details/1…

java项目之基于用户兴趣的影视推荐系统设计与实现源码(ssm+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的基于用户兴趣的影视推荐系统设计与实现。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 基于用户…

【C++学习篇】C++11第二期学习

目录 1. 可变参数模板 1.1 基本语法及原理 1.2 包扩展 1.3empalce系列接⼝ 2. lamba 2.1 lambda的语法表达式 2.2 捕捉列表 2.3 lamba的原理 1. 可变参数模板 1.1 基本语法及原理 1. C11⽀持可变参数模板&#xff0c;也就是说⽀持可变数量参数的函数模板和类模板&…

C++ 设计模式-适配器模式

适配器模式示例,包括多电压支持、类适配器实现、安全校验等功能: #include <iostream> #include <memory> #include <stdexcept>// 抽象目标接口:通用电源接口 class PowerOutlet {public:virtual ~PowerOutlet() = default;virtual int outputPower() c…

kafka了解-笔记

文章目录 kafka快速上手Kafka介绍Kafka快速上手理解Kafka的集群工作机制Kafka集群的消息流转模型 Kafka客户端小型流转流程客户端工作机制 kafka快速上手 Kafka介绍 MQ的作用 MQ&#xff1a;MessageQueue&#xff0c;消息队列&#xff0c;是一种FIFO先进先出的数据结构&#…

Spring Cloud 04 - 负载均衡和外部服务访问

Ribbon & Feign 文章目录 Ribbon & Feign一&#xff1a;Ribbon负载均衡1&#xff1a;介绍 2&#xff1a;ribbon的五大核心组件二&#xff1a;Feign外部接口访问1&#xff1a;Feign概述2&#xff1a;Feign vs OpenFeign3&#xff1a;使用示例3.1&#xff1a;注解支持3.2…