EF Core多级关联查询实战:ThenInclude与Include链式调用的最优配置方案

第一章:EF Core多级关联查询的核心概念

在现代数据驱动的应用开发中,Entity Framework Core(EF Core)作为.NET平台主流的ORM框架,广泛用于处理复杂的数据访问逻辑。多级关联查询是其中的关键能力之一,它允许开发者通过导航属性跨越多个实体层级,从数据库中高效提取结构化数据。

什么是多级关联查询

多级关联查询指的是在一个查询中访问多个层级的关联实体。例如,在一个订单系统中,可以从Order实体出发,进一步加载其关联的Customer,并继续加载客户的Address信息。这种跨层级的数据获取方式极大提升了数据访问的灵活性。

实现方式与Include方法

EF Core通过Include和ThenInclude方法支持多级关联加载。以下代码展示了如何使用这些方法进行三级关联查询:
// 查询订单,并加载客户及其地址信息
var orders = context.Orders
    .Include(o => o.Customer)           // 第一级:订单 → 客户
        .ThenInclude(c => c.Address)     // 第二级:客户 → 地址
    .ToList();
上述代码中,Include用于指定第一层关联,而ThenInclude则在其基础上继续深入下一层级。

常见关联类型对比

关联类型适用场景加载方式
一对一用户与配置文件Include + ThenInclude
一对多订单与订单项Include
多级嵌套订单→客户→地址Include + ThenInclude链式调用
  • 使用Include时需注意避免循环引用
  • 过度使用多级加载可能导致“笛卡尔积”问题,影响性能
  • 建议结合Select投影仅获取必要字段以优化查询效率

第二章:ThenInclude基础与语法解析

2.1 ThenInclude的工作机制与加载原理

多级导航属性的延迟加载
在 Entity Framework Core 中,ThenInclude 用于实现对集合类型导航属性的深层关联加载。当主查询通过 Include 加载一级关联后,可链式调用 ThenInclude 继续加载子层级。
var blogs = context.Blogs
    .Include(b => b.Posts)
    .ThenInclude(p => p.Comments)
    .ToList();
上述代码首先加载博客及其文章,再逐层加载每篇文章下的评论。EF Core 将生成包含多表连接的 SQL 查询,确保所有层级数据一次性加载,避免 N+1 查询问题。
内部执行流程
EF Core 解析表达式树,识别嵌套路径并构建对应的 JOIN 操作。查询结果通过标识解析(Identity Resolution)机制去重,保证对象图完整性。

2.2 多级导航属性的映射配置实践

在复杂领域模型中,多级导航属性的映射是确保实体间关联关系正确持久化的关键。通过配置导航属性,可实现层级对象图的自动加载与更新。
嵌套导航映射示例
modelBuilder.Entity<Order>()
    .HasOne(o => o.Customer)
    .WithMany(c => c.Orders)
    .HasForeignKey(o => o.CustomerId)
    .HasNavigation(o => o.Customer)
    .UsePropertyAccessMode(PropertyAccessMode.Field);
上述代码配置了订单到客户的单向导航,并指定字段访问模式,避免代理干扰。当查询订单时,可通过 Include 链式加载客户及其地址信息。
深度关联的数据加载策略
  • 使用 ThenInclude 实现三级以上关联加载
  • 避免过度加载,结合 Select 投影优化性能
  • 启用延迟加载时需谨慎管理上下文生命周期

2.3 Include与ThenInclude链式调用的执行流程分析

在Entity Framework Core中,`Include`与`ThenInclude`的链式调用用于实现多层级关联数据的加载。该机制通过构建表达式树,逐层解析导航属性,最终生成包含联接逻辑的SQL语句。
执行顺序解析
调用`Include`后继续使用`ThenInclude`,表示对前一级关联对象的子属性进行进一步加载。EF Core按调用顺序构建查询路径,确保外键关系正确映射。
var blogs = context.Blogs
    .Include(b => b.Posts)
        .ThenInclude(p => p.Comments)
    .ToList();
上述代码首先加载博客及其文章,再逐层加载每篇文章的评论。EF Core生成单条SQL,通过LEFT JOIN关联Posts和Comments表,避免N+1查询问题。
内部执行阶段
  • 解析Include表达式,确定主实体与关联实体
  • 构建关系路径,记录导航属性链
  • 生成包含多表连接的SQL命令
  • 执行查询并组装层次化对象图

2.4 常见多级关联结构的设计模式

在复杂业务系统中,多级关联结构常用于表达层级化数据关系,如组织架构、分类目录和权限树等。合理的设计模式能显著提升查询效率与维护性。
嵌套集模型(Nested Set)
该模型通过左右值编码实现高效范围查询,适用于读多写少的场景。
CREATE TABLE category (
  id INT PRIMARY KEY,
  name VARCHAR(50),
  lft INT NOT NULL,
  rgt INT NOT NULL,
  INDEX(lft),
  INDEX(rgt)
);
其中 lft 和 rgt 表示节点在树中的遍历序号,子树可通过 lft BETWEEN parent_lft AND parent_rgt 快速检索。
路径枚举与闭包表对比
  • 路径枚举:存储完整路径(如 "/1/3/5"),查询直接但更新成本高
  • 闭包表:独立关联表记录所有祖先-后代关系,支持复杂层级操作
闭包表结构可表示为:
ancestordescendantdepth
110
131
152

2.5 调试与验证查询结果的实用技巧

在编写复杂查询时,确保结果准确性至关重要。使用临时结果检查可快速定位逻辑错误。
打印中间结果进行调试
// 使用 fmt 打印查询中间值
fmt.Printf("当前查询条件: %+v\n", queryFilters)
fmt.Printf("返回记录数: %d\n", len(results))
通过输出结构体和集合长度,可直观判断数据流是否符合预期,尤其适用于链式查询操作。
常见验证策略
  • 断言返回数量是否匹配预期条件
  • 校验关键字段是否为空或异常值
  • 对比前后两次查询的差异点
结合日志标记与分段输出,能显著提升排查效率。

第三章:性能优化关键策略

3.1 减少冗余数据加载的精准查询设计

在高并发系统中,数据库查询效率直接影响整体性能。通过精准设计查询语句,避免 SELECT * 等全字段加载方式,仅获取业务所需字段,可显著降低 I/O 开销。
只查必要字段
使用投影查询替代全表字段获取,减少网络传输和内存占用:
SELECT user_id, username, email 
FROM users 
WHERE status = 'active' AND created_at > '2024-01-01';
该查询仅提取活跃用户的核心信息,避免加载如 avatar、profile 等大字段,提升响应速度。
索引配合精准过滤
  • 为 WHERE 条件中的字段创建复合索引,加速数据定位
  • 利用覆盖索引使查询无需回表,进一步提升性能
结合字段精简与索引优化,可有效减少冗余数据加载,提升系统吞吐能力。

3.2 避免N+1查询问题的实践方案

在ORM操作中,N+1查询是性能瓶颈的常见来源。当遍历集合并对每条记录发起数据库查询时,将触发一次初始查询和N次附加查询,严重影响响应效率。
预加载关联数据
通过预加载(Eager Loading)一次性获取所有关联数据,避免逐条查询。例如在GORM中使用Preload:

db.Preload("Orders").Find(&users)
该语句生成JOIN查询或独立查询,将用户及其订单一并加载,消除后续循环中的额外请求。
批量查询优化
使用IN子句批量获取关联数据:

var userIDs []uint
for _, u := range users {
    userIDs = append(userIDs, u.ID)
}
var orders []Order
db.Where("user_id IN ?", userIDs).Find(&orders)
此方式将N次查询压缩为1次,显著降低数据库往返次数。
  • 预加载适用于关联结构固定场景
  • 批量查询更适合复杂条件筛选

3.3 查询计划缓存与执行效率提升

查询计划缓存是数据库优化执行性能的关键机制。通过缓存已解析的执行计划,避免重复的查询解析和优化过程,显著降低CPU开销并加快响应速度。
查询计划的生成与复用
当SQL语句首次执行时,数据库会经历解析、优化、生成执行计划的过程。若启用了计划缓存,该计划将被存储在内存中,后续相同查询可直接复用。
-- 示例:参数化查询有利于计划复用
SELECT * FROM users WHERE id = @user_id;
上述SQL使用参数占位符,使得不同参数值仍能命中同一执行计划,提升缓存命中率。
缓存管理策略
数据库通常采用LRU(最近最少使用)算法管理计划缓存空间。以下为常见缓存控制参数:
参数名作用示例值
max_cache_size限制缓存最大内存占用256MB
plan_ttl设置计划存活时间300秒

第四章:典型应用场景实战

4.1 多级分类体系中的递归数据加载(如商品分类)

在电商系统中,商品分类常以树形结构组织,需高效加载多级节点。传统平铺查询难以表达层级关系,推荐采用递归查询或闭包表模式。
递归CTE实现层级遍历

WITH RECURSIVE category_tree AS (
    -- 基础查询:根节点
    SELECT id, name, parent_id, 0 AS level
    FROM categories
    WHERE parent_id IS NULL
    UNION ALL
    -- 递归部分:逐层加载子节点
    SELECT c.id, c.name, c.parent_id, ct.level + 1
    FROM categories c
    INNER JOIN category_tree ct ON c.parent_id = ct.id
)
SELECT * FROM category_tree ORDER BY level, name;
该SQL使用CTE递归查询,level字段标记深度,确保按层级顺序输出。适用于MySQL 8.0+、PostgreSQL等支持递归CTE的数据库。
典型应用场景
  • 前端级联选择器的数据源构建
  • 后台管理菜单的动态渲染
  • SEO友好的分类路径生成

4.2 企业组织架构中部门-角色-用户的深度关联查询

在企业级权限系统中,部门、角色与用户之间的多层关联关系是实现精细化访问控制的核心。为高效查询某一部门下所有具备特定角色的用户,需构建跨表联合查询机制。
数据模型设计
典型三者关系可通过以下结构表示:
表名字段说明
departmentsid, name
rolesid, role_name
usersid, username, dept_id
user_rolesuser_id, role_id
联合查询示例
SELECT u.username, r.role_name, d.name 
FROM users u
JOIN departments d ON u.dept_id = d.id
JOIN user_roles ur ON u.id = ur.user_id
JOIN roles r ON ur.role_id = r.id
WHERE d.id = 1001 AND r.role_name = 'Admin';
该SQL语句通过四表联查,精准定位某部门下的管理员用户。其中,JOIN操作确保了层级关系的完整性,WHERE条件实现过滤逻辑,适用于后台审计与权限分析场景。

4.3 订单系统中订单-明细-产品-库存的连贯获取

在订单处理流程中,需高效串联订单、明细、产品与库存数据。为保证数据一致性与响应性能,通常采用分层拉取策略。
数据获取流程
首先根据订单ID查询订单主信息,再关联订单明细表获取商品列表,逐项匹配产品服务中的商品详情,并实时调用库存服务校验可用库存。
典型代码实现
// 查询订单及明细并合并产品与库存信息
func GetOrderWithInventory(orderID int) (*OrderDetailResponse, error) {
    order := queryOrder(orderID)
    items := queryOrderItems(orderID)
    for i := range items {
        product := fetchProduct(items[i].ProductID)  // 调用产品服务
        stock := checkStock(items[i].ProductID)      // 查询库存服务
        items[i].ProductName = product.Name
        items[i].AvailableStock = stock.Count
    }
    return &OrderDetailResponse{Order: order, Items: items}, nil
}
上述代码通过串行调用微服务聚合数据,fetchProduct 获取商品名称与规格,checkStock 实时返回可售库存,确保用户下单时信息准确。

4.4 API响应 DTO 构造时的高效数据组装

在构建API响应时,DTO(Data Transfer Object)的数据组装效率直接影响接口性能。为减少冗余字段和避免N+1查询,推荐使用预加载与映射分离策略。
结构体映射优化
通过定义清晰的DTO结构体,仅暴露必要字段:

type UserDTO struct {
    ID    uint   `json:"id"`
    Name  string `json:"name"`
    Email string `json:"email,omitempty"`
}

func NewUserDTO(user *User) *UserDTO {
    return &UserDTO{
        ID:   user.ID,
        Name: user.Profile.Name,
        Email: user.Contact.Email,
    }
}
上述代码将领域模型转换为传输对象,避免直接暴露数据库实体。构造函数集中处理字段映射,提升可维护性。
批量组装性能对比
方式时间复杂度适用场景
逐条构造O(n)小规模数据
并发映射O(n/m)高并发列表

第五章:最佳实践总结与未来展望

构建高可用微服务架构的关键策略
在生产环境中,保障服务的持续可用性是核心目标。采用服务网格(如 Istio)可实现细粒度的流量控制与故障注入测试。例如,在灰度发布过程中,通过以下配置可实现 5% 流量切分:

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: user-service-route
spec:
  hosts:
    - user-service
  http:
  - route:
    - destination:
        host: user-service
        subset: v1
      weight: 95
    - destination:
        host: user-service
        subset: v2
      weight: 5
自动化监控与告警体系设计
完整的可观测性应涵盖日志、指标与链路追踪。使用 Prometheus + Grafana + Loki 构建统一监控平台,关键指标包括 P99 延迟、错误率和 QPS。告警规则应基于动态阈值,避免误报。
  • 每分钟采集容器 CPU/内存使用率
  • 通过 Jaeger 追踪跨服务调用链
  • 关键业务接口设置 SLA 熔断机制
云原生安全的最佳实践
零信任架构要求所有访问请求均需认证与授权。使用 Kubernetes 的 NetworkPolicy 限制 Pod 间通信,并结合 OPA(Open Policy Agent)实施策略即代码。
安全层级实施手段工具示例
网络层微隔离策略Calico, Cilium
应用层JWT 鉴权Keycloak, Auth0
数据层字段级加密Hashicorp Vault
未来,随着 AIOps 的深入应用,异常检测将从规则驱动转向模型预测,实现真正的智能运维闭环。
EFCore 关联表查询_多表使用整理 一、EF Core 查询出关联表数据 EF Core 默认不支持查询中带出关联表数据,如果需要则使用Include() 声明加载 ctx.Categories .Include(c => c.Products) .Include(c => c.News); 二、EF Core 关联表条件筛选 场景案例举例子 1. Sql 语句场景 需求举例 ---查询指定角色下的菜单 select * from Sys_Navigation where NavID in( s 阅读详情

相关推荐

实战分享:如何用Dify和MaxKb实现文档智能切分与高效检索(附代码解析)

本文详细介绍了如何结合Dify和MaxKB构建文档智能切分与高效检索系统。针对传统全文检索的不足,提出了结构感知的文档切分方案,通过解析文档层级关系并构建标题链,实现了精准的章节级检索。文章包含完整的代码实现,涵盖文档解析、智能切分、向量化策略及双索引优化,并分享了性能调优和生产环境实践经验。

qsc90123456的博客 546

.NET程序员成长三维标尺:人格底座>工程能力>编码技能

在软件开发领域,技术能力常被简化为编程语言熟练度或框架使用经验,但真实工程效能取决于更底层的综合素养。程序员成长本质是认知升级过程:从建立可信赖的个人信用体系(做人),到具备问题重定义与跨层权衡能力(技术人员),再到精准交付价值的编码实践(程序员)。这一路径直指.NET开发者在高并发、分布式、云原生等场景中频繁遭遇的典型困境——如EF Core性能瓶颈、连接池耗尽、线上事故响应迟缓等,其根因往往不在语法或配置,而在技术判断力缺失与协作信用不足。因此,扎实的.NET工程实践,必须以人格稳定性为前提,以系统性技

328

科普:Frenet坐标

理想情况下,描述这种常见驾驶行为在数学上应该很容易。一种方法是使用新的坐标系。现在,而不是放下一个正常的笛卡尔网格,我们做一些事情,就像你看到下面…Frenet Coordinates是一种以比传统x,y笛卡尔坐标更直观的方式表示道路位置的方式。如果我们想要方程式来描述这个动作,那就不容易了!想象一下像下面这样一条弯曲的道路,笛卡尔坐标系就位于它的上面…使用这些笛卡尔坐标,我们可以尝试描述车辆通常在路上行驶的路径…那么在Frenet坐标系下呈现的典型轨迹是什么样的?在这里,我们定义了一个新的坐标系统。

OceanStar的博客 1万+

Java全栈工程师-Hibernate框架

本课程详细讲解Hibernate的常用的关联关系映射,如一对一,一对多,多对多等 本课程详细讲解Hibernate各种查询方法,如HQL查询,Criteria查询,本地SQL查询等 本课程讲解Hibernate各种高级特性,如延迟加载、快照机制、整合连接池等

ClickHouse的bitmap使用

ClickHouse的bitmap使用 bitmap的基本使用 在CK中bitmap有两种构建方式,在ClickHouse的官网有说明: (1)一个是由聚合函数groupBitmapState构造的, (2)另一个是由Array Object构造的。同时还可以将位图对象转化为数组对象。 bitmap实战 数据和基本数据表准备 创建一张基本表,一个用户表,有多个描述的维度,每个维度由该维度的唯一id。 CREATE TABLE test02(id UInt16, tag1 UInt8, tag2 UInt8,

zg_hover的专栏 5654

Delphi开发者必备:CEF4Delphi跨平台浏览器嵌入实战指南(含Lazarus适配)

本文详细介绍了Delphi开发者如何利用CEF4Delphi实现跨平台浏览器嵌入,包括环境配置、Lazarus适配、ARM架构优化及Firemonkey集成等实战技巧。通过Chromium引擎的强大功能,开发者可以轻松为传统桌面应用添加现代浏览器特性,提升多平台开发效率。

weixin_29233333的博客 226

EF Core中实现高效多级关联查询的5种方式(Include进阶用法大公开)

掌握EF Core Include多级导航的高效查询技巧,解决复杂关联数据加载难题。涵盖显式加载、ThenInclude链式调用等5种实用方法,提升查询性能与代码可读性,适用于多层级对象模型场景,值得收藏。

CompiGlow的博客 491

【题解-洛谷】B3644 【模板】拓扑排序 / 家谱树

有个人的家族很大,辈分关系很混乱,请你帮整理一下这种关系。给出每个人的后代的信息。输出一个序列,使得每个人的后辈都比那个人后列出。输出一个序列,使得每个人的后辈都比那个人后列出。如果有多种不同的序列,输出任意一种即可。),表示家族的人数。

写代码的犄角旮瘩 1065

EntityFramework Core入门教程-07-级联查询 (关联数据查询)

级联查询 include关键字 注意: 1.IQueryable类型才会有Include,因此不能将Include方法哦FirstOrDefault后面 2.Find方法也不支持Include,Find不属于linq的方法,它是DbSet的方法 常规语法: _context.Enitties .Where(...) .Include(...) .ToList()//FirstOrDefault() 案例:将Club关联的League和Player全部查询出来 var club = contex

weixin_40719943的博客 2841

如何在Dify中安装运行pandas、numpy库(离线、在线均支持,可提供远程指导)

pandas和numpy这两个库是数据科学和数据分析中经常使用的工具包,原生的Dify无法直接使用这两个库,需要手动安装后才可以使用。本文将介绍如何在Dify中安装pandas和numpy,并在代码执行节点中运行使用pandas和numpy。Dify的代码执行节点中的python逻辑,实际是运行在Dify沙盒中的,因此我们在沙盒中安装pandas和numpy就可以了。如果您有在Dify中添加pandas、numpy的应用需求,欢迎关注作者进行交流。

litlit023的专栏 5634

Microsemi Libero系列教程(一)——Libero开发环境介绍、下载、安装与注册

前言 相比与Xilinx和Altera在国内的市场,Microsemi的FPGA在国内应用很少很少,网上几乎没有详细的教程,刚开始使用时,遇到了各种问题,自己也走了不少弯路。本系列教程以Libero V11.8.2.4,SmartFusion系列A2F200M3F FPGA芯片为例,将详细介绍Libero SoC软件的基本使用,及使用过程中遇到一些问题的解决方法。 Libero 简介 关于Lib...

whik1194的博客 3万+

轻松学EntityFramework Core--EF Core 高级查询

在 EF Core 中,除了使用 LINQ 查询之外,还可以直接执行原生 SQL 查询。FromSqlRaw和是 EF Core 提供的两种方法,用于在 LINQ 查询中直接执行 SQL 语句。这两者主要用于需要手动编写复杂 SQL 查询或调用存储过程的场景。FromSqlRawFromSqlRaw方法用于执行原生 SQL 查询,允许我们以字符串的形式传递 SQL 语句。这个方法不会对传入的 SQL 语句进行参数化,因此我们需要手动处理参数,以防止 SQL 注入。假设我们有一个Products。

喵叔 4182

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

彻底解决EF Core Include循环引用问题(实战案例+源码级分析)

彻底解决EF Core Include循环引用难题,深入剖析EF Core 的 Include 多级导航机制,涵盖真实应用场景与性能优化策略。通过配置忽略循环引用、使用ThenInclude精准加载,提升查询效率。实战案例+源码级分析,值得收藏。

QuickCode的博客 392

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

别再写低效查询了!EF Core多级导航优化指南(仅限资深开发者掌握)

掌握EF Core 的 Include 多级导航优化技巧,解决查询性能瓶颈。适用于复杂实体关联场景,通过合理使用ThenInclude与投影查询,减少数据库往返,提升数据加载效率。避免常见误区,实现高效数据访问,值得收藏。

FuncWander的博客 907

用一只猫学透.NET 8核心开发范式

.NET 是微软推出的跨平台、高性能通用开发平台,其核心涵盖类型系统、依赖注入、异步编程、EF Core 数据访问与Minimal APIs等现代架构能力。理解这些机制的关键在于具象化实践:通过构建一个轻量但完整的领域模型(如Cat类),可直观掌握record不可变性、Source Generators代码生成、Clean Architecture分层设计、DI生命周期管理及Blazor全栈协同等技术价值。该模式广泛适用于教学演示、团队技术布道与微服务原型验证等场景,尤其适合C#初学者建立系统性认知,也便于

diaoqi6581的博客 347

揭秘EF Core多级关联查询:ThenInclude如何提升数据访问效率?

掌握EF Core多级关联查询技巧,高效加载复杂数据结构。本文详解EF Core ThenInclude 多级用法,适用于嵌套导航属性场景,提升查询性能与代码可读性,避免N+1问题,值得收藏

SimTrans的博客 304

项目开发中的一些注意事项以及技巧总结 基于Repository模式设计项目架构—你可以参考的项目架构设计 Asp.Net Core中使用RSA加密 EF Core中的多对多映射如何实现? a...

项目开发中的一些注意事项以及技巧总结 1、jquery采用ajax向后端请求时,MVC框架并不能返回View的数据,也就是一般我们使用View()、PartialView()等,只能返回json以及content等,但是一般我们在开发的时候也是使用json返回的,此时如果需要渲染界面或者是加载局部视图,我们可以在ajax的success的事件中使用$.html()来渲染后...

412

EF CORE 一对多、多对多添加、修改

创建.net core 控制台应用程序: 项目文件结构: 添加如下NuGet包: Microsoft.EntityFrameworkCore Microsoft.EntityFrameworkCore.SqlServer Microsoft.EntityFrameworkCore.Tools 添加如下实体类: /// <summary> /// 部门 /// &...

qq_32109957的博客 1万+

EF 多表查询的方法

EF实体类 entity = new EF实体类(); var query = (from u in entityt.用户表 join b in entity.权限表 on u.用户权限Id equls b.Id where u.用户Id == 1 select u).FirstOrDefault(); 两个表的linq          private DataClasses1Da

findsafety的专栏 4万+

EFCore笔记之查询数据

查询数据 基础查询,Linq100实例:https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b using (var context = new BloggingContext()) { var blogs = context.Blogs.ToList(); //查询所有数据 //var blog = ...

weixin_34006468的博客 2020

EFCore 一对多

Author(作者)实体模型类(一端) 注:一个作者可以写多本书,一本书只能有一个作者,所以作者是一端,书是多端 public class Author { public int Id { get; set; } //作者姓名 public string AuthorName { get; set; } } Book(书)实体模型类(多端) public c...

Fanbin168的专栏 3714

.NetCore中EFCore的使用整理(二)-关联表查询

EF常用处理关联加载的方式有3中:延迟加载(Lazy Loading)、贪婪加载 (Eager Loading)以及显示加载。 一、EF Core  1.1 1.当前的版本,还不支持延迟加载(Lazy Loading),不将来是否支持 2.目前支持贪婪加载:使用Include加载 关联表 的数据,这种方式 使用一条Join的 Sql语句进行查询。 3. 贪婪加载的优势在于仅执行1次SQL查询即返回...

weixin_34099526的博客 4240
上一篇: 为什么你的default方法无法访问?深入字节码层面找答案
下一篇: C# 9模式匹配避坑指南:and/or使用中的常见误区与最佳实践
DevPath
博客等级 码龄1年 179粉丝 2176原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值