EF Core多级关联加载全解析,彻底搞懂ThenInclude与Split Queries的取舍之道

第一章:EF Core多级关联加载的核心概念

在使用 Entity Framework Core(EF Core)进行数据访问时,多级关联加载是处理复杂对象关系的关键技术。它允许开发者从数据库中检索实体及其相关联的子实体、孙实体等多层级数据结构,从而构建完整的对象图。

什么是多级关联加载

多级关联加载指的是在一个查询中加载主实体及其多个层级的导航属性。例如,在一个博客系统中,加载一篇博客文章(Blog),同时加载其所有帖子(Posts),并进一步加载每个帖子的评论(Comments)。

加载策略概述

EF Core 提供了多种加载方式来实现多级关联:
  • Include:用于显式指定要加载的关联实体
  • ThenInclude:在 Include 的基础上继续深入下一级关联
  • Eager Loading:在查询时一次性加载所有相关数据

代码示例:多级包含查询

// 查询博客,并加载其帖子及每个帖子的评论
var blogs = context.Blogs
    .Include(blog => blog.Posts)           // 第一级:加载帖子
        .ThenInclude(post => post.Comments)  // 第二级:加载评论
    .ToList();

// 执行逻辑说明:
// 1. EF Core 生成 JOIN 查询语句
// 2. 从数据库获取扁平化结果集
// 3. 在内存中自动组装成层级对象结构

常见场景对比

场景使用方法适用性
一对多再对多Include + ThenInclude高,如 Blog → Posts → Comments
并行多级关联多个 Include 链中,如同时加载作者和标签
graph TD A[Blog] --> B[Posts] B --> C[Comments] A --> D[Author] B --> E[Tags]

第二章:Include与ThenInclude的深度应用

2.1 多级导航属性的基本加载机制

在实体框架中,多级导航属性的加载依赖于关联实体的自动或显式加载策略。当查询主实体时,相关联的子实体可通过包含(Include)方法逐层加载。
显式加载语法示例
var orders = context.Orders
    .Include(o => o.Customer)
    .ThenInclude(c => c.Addresses)
    .Include(o => o.OrderItems)
    .ThenInclude(oi => oi.Product)
    .ToList();
上述代码通过 Include 和 ThenInclude 实现两级关联加载:订单 → 客户 → 地址,以及订单 → 订单项 → 产品。每个 ThenInclude 延续前一级导航路径,构建完整的对象图。
加载方式对比
  • Eager Loading(贪婪加载):使用 Include 预加载所有层级,减少数据库往返次数
  • Lazy Loading(延迟加载):访问导航属性时按需加载,可能引发 N+1 查询问题
  • Explicit Loading(显式加载):手动调用 Load() 方法控制加载时机

2.2 ThenInclude实现一对多与多对多嵌套查询

在Entity Framework Core中,`ThenInclude`方法用于在包含关联数据时进行深层导航,特别适用于一对多与多对多关系的嵌套加载。
基本用法示例
var blogs = context.Blogs
    .Include(b => b.Posts)
        .ThenInclude(p => p.Comments)
    .ToList();
上述代码首先通过`Include`加载博客及其文章,再通过`ThenInclude`进一步加载每篇文章的评论,形成两级关联数据获取。
多对多关系处理
对于多对多关系,需通过导航属性链式调用:
var courses = context.Courses
    .Include(c => c.Students)
        .ThenInclude(cs => cs.Student)
    .ToList();
此处`Students`为连接实体集合,`ThenInclude`继续加载学生详情,实现跨中间表的数据拉取。 这种机制显著提升了数据访问效率,避免了N+1查询问题。

2.3 复杂实体图的链式包含策略设计

在处理复杂实体图时,链式包含策略能有效管理嵌套关联数据的加载与序列化。通过逐层定义包含规则,避免过度加载或遗漏关键关联。
链式包含逻辑实现

type QueryOption struct {
    Includes []string
}

func (q *QueryOption) Include(relations ...string) *QueryOption {
    q.Includes = append(q.Includes, relations...)
    return q
}

// 使用示例:User -> Posts -> Comments -> Author
query := &QueryOption{}
query.Include("Posts").Include("Comments").Include("Author")
上述代码通过方法链累积包含路径,Each调用追加关系层级,最终构建完整导航路径。
包含路径解析流程

客户端请求 → 解析包含链 → 按依赖顺序执行JOIN查询 → 构建树形结果结构

该策略支持动态组合,提升查询灵活性,同时便于缓存键生成与权限过滤集成。

2.4 避免常见陷阱:循环引用与重复加载

在模块化开发中,循环引用和重复加载是常见的性能隐患。当两个或多个模块相互依赖时,容易引发初始化失败或内存泄漏。
循环引用示例

// moduleA.js
import { valueB } from './moduleB.js';
export const valueA = 'A';
console.log(valueB);

// moduleB.js
import { valueA } from './moduleA.js'; // 循环依赖
export const valueB = 'B';
上述代码中,moduleA 和 moduleB 相互导入,导致执行上下文未完成时即被引用,可能输出 undefined。
解决方案
  • 重构模块职责,引入中介模块解耦依赖;
  • 延迟加载(dynamic import)避免静态解析期的循环;
  • 使用构建工具(如Webpack)检测并提示循环引用。
通过合理设计模块结构,可有效规避此类问题。

2.5 实战案例:订单系统中的三级关联查询

在电商订单系统中,常需查询“订单→用户→收货地址”三级关联数据。为提升查询效率,采用预加载策略避免N+1问题。
数据模型设计
订单表(orders)关联用户表(users),用户表再关联地址表(addresses)。通过外键 user_id 和 address_id 建立级联关系。
SQL 查询示例
SELECT o.id, u.name, a.province, a.city 
FROM orders o 
JOIN users u ON o.user_id = u.id 
JOIN addresses a ON u.address_id = a.id 
WHERE o.id = 1001;
该查询一次性获取订单对应的用户名及所在省市,减少多次数据库往返。
性能优化策略
  • 为外键字段建立索引,加速 JOIN 操作
  • 使用连接池管理数据库连接,提高并发处理能力

第三章:Split Queries的原理与适用场景

3.1 分裂查询的工作机制与性能优势

分裂查询(Split Query)是一种将复杂查询拆分为多个独立子查询并行执行的优化策略,广泛应用于现代ORM框架和分布式数据库系统中。
查询拆分原理
在处理包含多表关联的查询时,传统方式采用单条JOIN语句一次性获取数据,容易造成内存压力和锁竞争。分裂查询则将主查询按实体关系分解,分别执行后在应用层合并结果。
  • 减少数据库锁持有时间
  • 提升并发执行能力
  • 降低单次查询的资源消耗
性能对比示例
-- 传统联合查询
SELECT u.Name, p.Title 
FROM Users u 
JOIN Posts p ON u.Id = p.UserId 
WHERE u.Active = 1;

-- 分裂查询等价实现
SELECT Id, Name FROM Users WHERE Active = 1;
SELECT UserId, Title FROM Posts WHERE UserId IN (1, 2, 3);
上述拆分后,两个查询可并行执行,避免大表JOIN带来的全表扫描问题。第一句获取活跃用户ID列表,第二句基于这些ID查询对应文章,最终在应用层进行关联组装。
策略响应时间内存占用
联合查询800ms高
分裂查询300ms中

3.2 启用Split Queries的配置方式与限制条件

配置方式
在Entity Framework Core中启用Split Queries需通过DbContext配置。使用UseQuerySplittingBehavior方法指定查询拆分策略:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    optionsBuilder
        .UseSqlServer(connectionString)
        .UseQuerySplittingBehavior(QuerySplittingBehavior.SplitQuery);
}
该配置将导致包含Include的查询被拆分为多个独立SQL语句,避免笛卡尔积膨胀。
限制条件
  • 仅适用于包含Include或ThenInclude的查询
  • 不支持事务内部分查询失败的回滚(因多语句执行)
  • 某些数据库提供程序可能未完全实现该特性
Split Queries提升性能的同时,需权衡数据一致性与网络往返开销。

3.3 对比单查询模式:内存与数据库开销分析

在高并发场景下,单查询模式虽实现简单,但频繁访问数据库会显著增加连接开销和响应延迟。
性能瓶颈剖析
每次请求独立查询数据库,导致连接池压力大,且重复SQL解析消耗CPU资源。相比之下,批量查询或缓存机制能有效降低数据库负载。
资源消耗对比
模式数据库连接数平均响应时间(ms)内存占用(MB)
单查询100045120
批量查询2001580
代码实现示例
// 单查询模式:每次请求执行一次数据库调用
func GetUser(id int) (*User, error) {
    var user User
    err := db.QueryRow("SELECT name, email FROM users WHERE id = ?", id).Scan(&user.Name, &user.Email)
    return &user, err // 每次调用独立连接,未复用结果
}
上述代码在高并发下会产生大量数据库连接,建议结合缓存层(如Redis)减少穿透压力。

第四章:性能优化与架构决策

4.1 查询性能评估:Include vs Split Queries

在实体框架中,处理关联数据时常用 Include 和 Split Queries 两种方式。前者通过单条 JOIN 查询获取所有数据,后者则生成多条独立查询。
Include 查询模式
var blogs = context.Blogs
    .Include(b => b.Posts)
    .ToList();
该方式生成一条包含 LEFT JOIN 的 SQL 语句,适合数据量小的场景。但当关联表数据庞大时,会产生大量重复主表记录,增加网络传输负担。
Split Queries 模式
var blogs = context.Blogs
    .AsSplitQuery()
    .Include(b => b.Posts)
    .ToList();
此模式生成两条独立 SQL:先查 Blogs,再以 IN 子句查 Posts。避免了数据冗余,显著降低内存占用和序列化开销。
策略SQL 数量数据冗余适用场景
Include1高小数据集
Split QueriesN+1低大数据集

4.2 数据一致性与延迟加载的权衡

在现代Web应用中,数据一致性与延迟加载之间存在显著的性能权衡。为了提升用户体验,延迟加载常用于推迟非关键数据的获取,但可能引入数据陈旧问题。
常见策略对比
  • 强一致性:每次请求都确保获取最新数据,牺牲响应速度
  • 最终一致性:允许短暂不一致,通过异步同步保障数据最终一致
代码示例:带缓存失效的延迟加载

function fetchUserData(userId) {
  const cached = localStorage.getItem(`user_${userId}`);
  const expiry = localStorage.getItem(`user_${userId}_expiry`);
  const now = Date.now();

  // 缓存未过期则使用
  if (cached && expiry > now) {
    return Promise.resolve(JSON.parse(cached));
  }

  // 否则发起请求并设置10分钟缓存
  return fetch(`/api/users/${userId}`)
    .then(res => res.json())
    .then(data => {
      localStorage.setItem(`user_${userId}`, JSON.stringify(data));
      localStorage.setItem(`user_${userId}_expiry`, now + 600000);
      return data;
    });
}
上述逻辑通过本地缓存实现延迟加载,同时设置有效期控制数据新鲜度,在性能与一致性间取得平衡。

4.3 在大型聚合根中合理选择加载策略

在处理大型聚合根时,数据加载效率直接影响系统性能。若一次性加载全部关联实体,可能导致内存溢出或响应延迟。
常见加载策略对比
  • 贪婪加载:一次性加载所有关联数据,适合关系简单、数据量小的场景;
  • 懒加载:按需加载子实体,减少初始开销,但可能引发N+1查询问题;
  • 分段加载:通过分页或分批次获取子集合,适用于超大规模聚合。
代码示例:分段加载实现

func (ar *OrderAggregate) LoadItemsPaginated(page, size int) ([]Item, error) {
    var items []Item
    offset := (page - 1) * size
    query := "SELECT id, name FROM items WHERE order_id = ? LIMIT ? OFFSET ?"
    rows, err := db.Query(query, ar.ID, size, offset)
    // 扫描并填充items...
    return items, err
}
该方法通过分页参数控制每次加载的商品数量,避免全量加载导致内存激增,适用于订单项庞大的聚合场景。

4.4 缓存友好性与API响应速度优化

在高并发系统中,提升API响应速度的关键在于减少数据库压力和降低请求延迟。合理利用缓存机制是实现这一目标的核心策略。
缓存策略设计
采用分层缓存架构,优先从内存缓存(如Redis)读取数据,避免频繁访问数据库。对高频读取、低频更新的数据设置合理的TTL,提升命中率。
// 示例:使用Redis缓存用户信息
func GetUserByID(id int) (*User, error) {
    key := fmt.Sprintf("user:%d", id)
    val, err := redisClient.Get(context.Background(), key).Result()
    if err == nil {
        var user User
        json.Unmarshal([]byte(val), &user)
        return &user, nil // 缓存命中
    }
    user := queryDB(id) // 缓存未命中,查数据库
    data, _ := json.Marshal(user)
    redisClient.Set(context.Background(), key, data, 5*time.Minute)
    return &user, nil
}
上述代码通过先查缓存、后回源数据库的逻辑,显著降低数据库负载。JSON序列化确保结构体可存储,Set操作设置5分钟过期时间,平衡一致性与性能。
HTTP缓存控制
通过设置恰当的响应头,启用客户端和CDN缓存:
  • Cache-Control: public, max-age=3600 允许中间代理缓存1小时
  • ETag 和 If-None-Match 实现条件请求,减少带宽消耗

第五章:总结与最佳实践建议

构建高可用微服务的配置管理策略
在生产环境中,配置应通过环境变量或集中式配置中心(如Consul、Nacos)注入,避免硬编码。例如,在Go服务中使用Viper加载远程配置:

viper.SetConfigName("config")
viper.SetConfigType("yaml")
viper.AddConfigPath("/etc/app/")
viper.AddConfigPath(".")
viper.WatchConfig()
viper.OnConfigChange(func(e fsnotify.Event) {
    log.Println("Config file changed:", e.Name)
})
日志与监控的最佳集成方式
统一日志格式有助于集中分析。推荐使用结构化日志库(如Zap),并结合Prometheus暴露关键指标。以下为常见监控项配置示例:
指标名称类型采集频率告警阈值
http_request_duration_mshistogram10s>500ms (P99)
goroutines_countgauge30s>1000
安全加固的关键措施
  • 启用HTTPS并强制HSTS头以防止中间人攻击
  • 对敏感接口实施JWT鉴权与速率限制
  • 定期轮换密钥并使用KMS托管主密钥
  • 在入口网关部署WAF规则拦截常见OWASP Top 10漏洞
Pending Running
新年美食鉴赏——基于注意力机制CBAM的美食101分类 新年美食鉴赏——基于注意力机制CBAM的美食101分类一、数据预处理1.数据集介绍2.读取标签3.统一命名4.整理图片路径5.划分训练集与验证集6.定义美食数据集二、注意力机制1.简介2.卷积块注意力网络——CBAM通道注意力模块CAM空间注意力模块SAM3.将通道、空间注意力模块合并三、基于卷积块注意力模块的ResNet-CBAM1.代码实现2.模型测试3.查看网络结构4.模型训练5.模型预测四、总结与升华个人简介 春节是一年当中最隆重、最盛大的节日,吃得最好的一餐可能就是年夜饭了,想想就很激动呢!随着新 阅读详情

相关推荐

单片机如何获得5V电源

在单片机实际设计中,有时会需要在电路中用到5V电压源,那么这个常见的实验需求有哪些办法解决呢,我综合网上的资料,概括一下: 1)USB    这种方法在我们直接将单片机板与电脑连接调试的时候,算是简单又方便的办法了,但如果我所要得到的成品不直接连接外部的器件,这就得舍弃。     常用的,USB/5V插头线,这是一种专门的电源线,一端是USB通用接口,可以直插USB端口,另一端是内正外负电压

Echo_Ana的博客 3万+

ASP.NET Core8.0学习笔记(二十四)——EF Core级联插入与删除

1.级联插入:在含有导航属性的实体(主体实体)中可以对实体进行级联插入。即在创建主体实体时直接把依赖实体进行赋值,此时只需要执行一次插入操作即可将主体实体与依赖实体同时入库。同时,导航属性所映射的字段将会被自动赋值。1.当两个实体建立联系时,只要删除主体实体,其相关联的依赖实体将会自动被删除。依赖实体Post中的导航属性BlogId被自动赋值。

qq_46103137的博客 652

驱动钛丝(SMA)的应用(5)汽车腰托气阀常见问题及解决方案

财哥在前段时间发布的《驱动钛丝(SMA)的应用(1)汽车腰托支撑按摩气阀模块》一文,引发了很多企业的拜访和交流。 目前很多厂家已经启动或正在进行相关研发,同时也遇到了诸如:钛丝选型、驱动位移、响应设计、温度控制、力量设计、点动滞后、铆接工艺、量化生产等问题。

weixin_39168671的博客 1241

Python3 url解析,urllib.parse

Python urllib.parse Python3标准库中的urllib,用来处理各种协议下的url请求。其中parse模块用来解析url,主要包含如下方法: __all__ = ["urlparse", "urlunparse", "urljoin", "urldefrag", "urlsplit", "urlunsplit", "urlencode", "parse_...

ZuoSuQu的博客 3499

RK3568驱动XS9922B:AHD/CVBS双模摄像头兼容性实战

在嵌入式视频开发中,摄像头驱动的稳定性与兼容性往往决定项目交付质量。Linux内核的V4L2框架提供了统一的视频采集抽象,从v4l2_subdev子设备到media controller链路,再到用户态视频节点,每一层都需要精确配置。对于RK3568这类边缘计算平台,其MIPI CSI接口和自研ISP配合RKCIF,构成了完整的多路视频接入通路。当需要接入模拟视频解码芯片时,驱动设计就需同时考虑AHD高清协议与CVBS标清信号的模式切换、格式协商以及寄存器配置。XS9922B作为支持双模输入的解码芯片,可与

weixin_34216614的博客 348

32、通用处理器通信平台发展与5G开源社区技术解析

本文探讨了基于通用处理器(GPP)的通信平台在5G技术中的发展现状与挑战,详细介绍了多个开源平台和硬件架构,并分析了软件加速方法和未来发展方向。文章指出,尽管GPP具有灵活性和开放性优势,但在实时信号处理和功耗等方面仍存在瓶颈,需要通过核心技术研发、标准化协作和应用拓展推动5G技术的实际应用。

orange的博客 128

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

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

qq_32109957的博客 1万+

Qt Quick (QML) 老年人健康管理

通过 **Qt SQL** 模块将所有健康数据(用药记录、体检数据等)安全地存储在本地 **SQLite** 数据库中。你想用 **Qt C++** 结合 **Qt Quick** (QML) 来开发一个老年人健康管理软件,主要功能包含 **用药提醒** 和 **健康记录** (使用 `Qt SQL` 存储数据)。* **UI 框架**: Qt Quick (QML) - 用于构建流畅、动态的用户界面。**数据模型类 (models/MedicationReminder.h / .cpp)**

寒寒豆豆软件公司的博客 193

EntityFrameworkCore 拆分查询(Split Query)

拆分查询是一种性能优化策略,通过将复杂的查询拆分为多个更简单的查询来提高性能,特别是在关联数据较多时。它能够减少内存消耗、避免查询过大带来的性能瓶颈,但也可能引入更多的数据库调用和延迟。使用拆分查询时,应该根据具体的场景进行权衡,选择最适合的查询方式。

情绪不稳定的98年程序员 943

CAMERALINK硬件封装说明

闲言少叙,直接上活,Cameralink硬件接口当前主要分为MDR26和SDR26两种,其中MDR对应封装较大价格比较便宜,SDR对应尺寸较小价格比较贵,这点我个人总是记错的图1 MDR26实物图图2 SDR26实物图。

6170

四足机器人关节电机控制器实现(附C++代码)

本文先对做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容。

qq_35635374的博客 462

EFCore学习笔记(9)——加载关联数据

如果完全跟着微软文档来学EF Core,那等学完,项目都凉透了。 光一个创建模型都有十几二十节。 所以应根据实际需要,对重点章节进行学习,一些知识点比较细的、深入的等后续要用到再学。 对我来说,除了基本的CRUD,还有一个很重要的功能就是访问相关联的表。就是点击表上的某个字段,可以跳转查看该字段相关联的表的详细信息。 而我在Query data章节中,发现了Load related data这一节,节中内容与这个功能有很大相关性。EF Core允许你在model中使用导航属性来加载关联的实体。下面是三种常用

三千幻想乡 1113

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【EF Core性能优化关键】:ThenInclude多级包含的3种高效写法,你掌握了吗?

掌握EF Core ThenInclude多级关联查询优化技巧,提升数据访问性能。详解三种高效写法及其适用场景,避免N+1查询问题,实现流畅的数据加载。方法实用,值得收藏。

ProceShoal的博客 453

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

python url解析成字典_关于解析:字典python的URL查询参数

是否有一种方法可以解析URL(带有一些python库)并返回一个python字典,其中包含URL的查询参数部分的键和值?例如:url ="http://www.example.org/default.html?ct=32&op=92&item=98"预期收益:{'ct':32, 'op':92, 'item':98}使用urllib.parse库:>>> from...

weixin_32287563的博客 1165

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

EF Core级联删除

前言 最近忙于.NET COERE WEB API的学习,遇到EFCORE中关于级联删除的知识,正好使用postman实践一下。 理论知识 (这块直接贴的官方文档,官方文档很清楚了) 概念 级联删除通常在数据库术语中用来描述一种允许在删除某行时自动触发删除相关行的特性。EF Core 删除行为还介绍了一个密切相关的概念,即子实体与父实体的关系已断开时自动删除该子实体,这通常称为“删除孤立项”。 EF Core 实现多种不同的删除行为,并允许配置各个关系的删除行为。EF Core 还实现基于关..

覃鸿宇的博客 3845

efcore 关联插入

出现这个错误: at Microsoft.EntityFrameworkCore.DbContext.SaveChanges(Boolean acceptAllChangesOnSuccess) Microsoft.EntityFrameworkCore.DbUpdateException: An error occurred while updating the entri...

dengshumi7891的博客 746

python urllib.parse

urlparse from urllib.parse import urlparse, urlunparse result = urlparse('http://www.baidu.com/index.html;user?id=5#comment') print(result) ParseResult(scheme='http', netloc='www.baidu.com', path=...

一位在路上的工程师的博客 669

urllib的parse模块

python 版本3.61.urlparse 定义:def urlparse(url, scheme=”, allow_fragments=True) 将url拆分成六大组件#!/usr/bin/evn python"测试urlparse"#导入parse模块 from urllib import parseurp = parse.urlparse('http://www.baidu.com:

山谷里的小水泡 1万+

python 简单网站 以及sqlite 操作 BaseHTTPServer

今天有需求做一个简单的http服务, 根据url 返回数据库查询结果即可  10.20.9.25:8123/validate?name=asd&passwd=123456  验证用户 10.20.9.25:8123/register?name=asd&passwd=123456 添加用户 启动服务 python httpserverdemo.py 812

火星大熊猫 4329

【Python爬虫历程】urllib库之URL解析函数urlparse和分割函数urlsplit

如果想要对url的各个部分进行分割提取出来,就需要urlparse和urlsplit函数来处理 前面讲到url的组成部分,附一下链接https://blog.youkuaiyun.com/qq_27524749/article/details/105074167 urlparse和urlsplit: 有时候拿到一个url,想要对这个url中的各个组成部分进行分割,那么这时候就可以使用urlpa...

Demo.demo的博客 1558

Python解析、提取url关键字

解析url用的类库:    python2版本:  from urlparse import urlparse import urllibpython3版本: from urllib.parse import urlparse import urllib.request     研究了不同的url规则发现:只要在搜索关键字是用=嫁接的,查询的关键在解析后的query...

IBoyMan 9534

【转】python的urllib 模块的简单介绍

<br /><br />一。该模块的用途:<br />1。从制定的URL获取数据<br />2。对URL字符串进行格式化处理<br />二。__version__='1.17'的urllib模块中的主要函数和类介绍:<br />1。函数:<br />(1)def urlopen(url, data=None, proxies=None)<br />参数说明:<br />url                     符合URL规范的字符串(包括http,ftp,gopher,local-file标准)<br

heartiner的专栏 758

如何使用EF Core在Blazor中创建级联的DropDownList

介绍 (Introduction) In this article, we are going to create a cascading dropdown list in Blazor using Entity Framework Core database first approach. We will create two dropdown lists — Country and City...

cumi7754的博客 958

Entity Framework Core 创建表之间外键的删除级联效果

entityBuilder.HasOne(m => m.ManageRole) .WithMany() .OnDelete(Microsoft.EntityFrameworkCore.Metadata.DeleteBehavior.Cascade);添加 .OnDelete(Microsoft.E

赫的BLOG 4077
上一篇: 从Program类到顶级语句,C# 10入口点演进全解析,你了解多少?
下一篇: C# 7元组命名元素十大常见误区(资深架构师20年经验总结)
CompiGap
博客等级 码龄1年 147粉丝 1970原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值