前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >5个EF core性能优化技巧,让你程序健步如飞

5个EF core性能优化技巧,让你程序健步如飞

作者头像
郑子铭
发布于 2023-02-12 02:40:39
发布于 2023-02-12 02:40:39
2.8K00
代码可运行
举报
运行总次数:0
代码可运行

1.使用 EF.Functions.xxx 进行查询

(1).使用 EF.Functions.Like进行模糊查询要比 StartsWith、Contains 和 EndsWith 方法生成的SQL语句性能更优。

A. Contains语句,生成的sql为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  var data3 = dbContext.T_UserInfor.Where(u => u.userName.Contains("p")).ToList();

用的是charindex

B. EF.Functions.Like语句生成的sql为:(Like搭配SQL查询的通配符使用)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  var data1 = dbContext.T_UserInfor.Where(u => EF.Functions.Like(u.userName, "%p%")).ToList();
  //或者
  var data2 = (from p in dbContext.T_UserInfor
               where EF.Functions.Like(p.userName, "%p%")
               select p).ToList();

注:需要引用Microsoft.EntityFrameworkCore命名空间 用的是Like

PS:在传统的.Net中,还有种用法 SqlMethods

(2).还有EF.Functions.DateDiffDay (DateDiffHour、DateDiffMonth),求天、小时、月之间的数量

PS:在EF Core中StartsWith、Contains和EndsWith模糊查询实际分别被解析成为Left、CharIndex和Right,而不是Like,而EF.Functions.Like会解析成Like语句。

2、添加Z.EntityFramework.Plus.EFCore依赖使用一些特殊的语法

这个是免费的,但 Z.EntityFramework.Plus的一些批量数据操作的包是收费的

(1) EFCore删除必须先查询再删除,优化后可直接删除:context.User.Where(t => t.Id == 100).Delete();

(2)优化更新语句:context.User.Where(t => t.Id == 4).Update(t =>new User() { NickName = "2224114" ,Phone = "1234"} );

3、正确使用Find(id=10)来代替FirstOrDefault(t=>t.id=10)

Find会优先查询缓存,当前面已经查询过这条数据的时候使用,而FirstOrDefault每次都会查询数据库;当id=10的数据被修改之后,find查出的数据是新数据。

4、禁用实体追踪

当我们从数据库中查询出数据时,上下文就会创建实体快照,从而追踪实体。在调用 SaveChanges 时,实体有任何更改都会保存到数据库中。

但是当我们只需要查询出实体而不需要修改时(只读),实体追踪就没有任何用途了。这时我们就可以调用 AsNoTracking 获取非追踪的数据,这样可以提高查询性能。具体代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var users = db.Users.AsNoTracking().ToList();
注:如果是多表查询可以在查询前
db.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;
这样就把所有表查询设置成了非追踪状态

5、使用 .Any(),尽量不使用

判断查询出的列表是否有值时,使用 .Any(),尽量不使用 .Count(); .FirstOrDefault()

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-02-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DotNet NB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
EF Core关系配置
关系配置: EF Core中实体之间关系的配置的套路: HasXXX(…).WithXXX(…); 有XXX、反之带有XXX。 XXX可选值One、Many。
鱼找水需要时间
2024/03/24
1450
EF Core关系配置
03-EF Core笔记之查询数据
微软提供了一百多个示例来演示查询,地址:https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b
拓荒者IT
2019/09/23
2.5K0
优化 EF Core 和 LINQ 以实现高性能应用程序
实体框架核心(Entity Framework Core,简称 EF Core)是一款强大的对象关系映射(ORM)工具,它弥合了面向对象编程与关系型数据库之间的差距,而 LINQ 在.NET 中提供了强大的查询语法。二者结合起来简化了与数据库的交互操作,但一些不经意的使用方式可能会导致性能瓶颈以及可扩展性问题。本文将深入探讨针对 EF Core 和 LINQ 的有效优化技巧,展示好与不好的代码示例,讨论相关优势,并着重介绍那些有助于提升性能和可扩展性的特性。
郑子铭
2025/02/28
730
优化 EF Core 和 LINQ 以实现高性能应用程序
Entity Framework Core 2.0 入门
LearnEf.Console依赖LearnEf.Domains和LearnEf.Data:
solenovex
2018/03/12
3.5K0
Entity Framework Core 2.0 入门
【asp.net core 系列】8 实战之 利用 EF Core 完成数据操作层的实现
通过前两篇,我们创建了一个项目,并规定了一个基本的数据层访问接口。这一篇,我们将以EF Core为例演示一下数据层访问接口如何实现,以及实现中需要注意的地方。
程序员小高
2020/06/09
1.6K0
【愚公系列】2023年02月 .NET/C#知识点-使用控制台手搭webapi框架
WebAPI是一种协议,用于允许网络应用程序(如浏览器)与网络服务器(如Web服务器)之间进行通信。它可以用于处理数据,访问数据库,处理图像和视频,以及进行其他高级功能。
愚公搬代码
2023/03/16
1.5K0
【愚公系列】2023年02月 .NET/C#知识点-使用控制台手搭webapi框架
.NET 性能—Entity Framework Core调优
在实际开发过程中,我们遇到性能问题,常见的性能提升方案整体分为硬件、软件、网络三个方面。
郑子铭
2023/08/30
4050
.NET 性能—Entity Framework Core调优
EF 通用数据层父类方法小结
注:该数据层方法为小弟平时项目所用方法,特此贡献出来,各位如有疑问或者好的建议可以提出来,大家一起成长!!!
跟着阿笨一起玩NET
2018/09/20
1.1K0
EF 通用数据层父类方法小结
ASP.NET Core 入门教程 8、ASP.NET Core + Entity Framework Core 数据访问入门
本篇代码以下代码进行调整:https://github.com/ken-io/asp.net-core-tutorial/tree/master/chapter-02
KenTalk
2018/12/29
2.2K0
ASP.NET Core 入门教程 8、ASP.NET Core + Entity Framework Core 数据访问入门
.NET EF Core(Entity Framework Core)
1、Entity Framework Core(EF Core)是微软官方的ORM框架。优点:功能强大、官方支持、生产效率高、力求屏蔽底层数据库差异;缺点:复杂、上手门槛高、不熟悉EFCore的话可能会进坑。 2、Dapper。优点:简单,N分钟即可上手,行为可预期性强;缺点:生产效率低,需要处理底层数据库差异。 3、EF Core是 模型驱动 (Model-Driven)的开发思想,Dapper是 数据库驱动(DataBase-Driven)的开发思想的。没有优劣,只有比较。 4、性能: Dapper等≠性能高;EF Core≠性能差。 5、EF Core是官方推荐、推进的框架,尽量屏蔽底层数据库差异,.NET开发者必须熟悉,根据的项目情况再决定用哪个。
鱼找水需要时间
2024/03/23
5750
.NET EF Core(Entity Framework Core)
.NET 云原生架构师训练营(模块二 基础巩固 EF Core 查询)--学习笔记
加载相关数据:https://docs.microsoft.com/zh-cn/ef/core/querying/related-data/
郑子铭
2020/12/30
1.2K0
.NET 云原生架构师训练营(模块二 基础巩固 EF Core 查询)--学习笔记
.net 温故知新:【10】.NET ORM框架EFCore使用入门之CodeFirs、DBFirst
前言:本系列是我自己学习.net相关知识,以便跟上.net跨平台的步伐,目前工作原因基本在.net Framework4.7以下,所以才有了这一系列的学习总结,但是并不是从基本的C#语法和基础知识开始的,而是围绕.net core以后平台的重要设计和差异进行温故知新。目的在于通过要点的梳理最后串联起整个跨平台框架。之前的几篇算是把框架重要设计和框架重要知识点复习了,当然什么系统都可能使用到ORM框架。所以这里为了整个过程的完整连续性加入一个EFCore的示例,ORM不算详细写了,毕竟ORM框架可以根据需求选择很多,如果再详细那又是另外一个系列了,这里只做简单介绍。从这篇ORM完成之后就将进入asp.net core的学习总结!
SpringSun
2022/12/22
3K0
.net 温故知新:【10】.NET ORM框架EFCore使用入门之CodeFirs、DBFirst
02-EF Core笔记之保存数据
EF Core通过ChangeTracker跟踪需要写入数据库的更改,当需要保存数据时,调用DbContext的SaveChanges方法完成保存。
拓荒者IT
2019/09/23
1.8K0
C# 数据操作系列 - 8. EF Core的增删改查
到目前为止,我们看了一下如何声明EF Core的初步使用,也整体的看了下EF Core的映射关系配置以及导航属性的配置。
程序员小高
2020/05/21
3.3K0
对EF Core进行扩展使支持批量操作/复杂查询
EF Core的问题一言难尽,然后有了各种插件,批量插入扩展,批量更新扩展,查询扩展。。。然后一个项目引入一堆扩展
用户8604107
2021/07/06
1.4K0
初级.NET程序员,你必须知道的EF知识和经验
注意:以下内容如果没有特别申明,默认使用的EF6.0版本,code first模式。 推荐MiniProfiler插件 工欲善其事,必先利其器。 我们使用EF和在很大程度提高了开发速度,不过随之带来的
逸鹏
2018/04/10
1.9K0
初级.NET程序员,你必须知道的EF知识和经验
采用EntityFramework.Extended 对EF进行扩展(Entity Framework 延伸系列2)
本文主要介绍了如何使用Entity Framework Core对数据库进行增删改查操作,包括原生SQL查询方式、Entity Framework Core原生API、DbContext的API以及原生SQL查询的批量操作、数据审计日志和查询缓存等。
GuZhenYin
2018/01/04
7820
采用EntityFramework.Extended 对EF进行扩展(Entity Framework 延伸系列2)
Entity Framework Plus: 让 EF Core 开发如虎添翼
Entity Framework (EF) Core 是轻量化、可扩展、开源和跨平台版的常用 Entity Framework 数据访问技术,EF Core 是适用于 .NET 的现代对象数据库映射器。它支持 LINQ 查询、更改跟踪、更新和架构迁移。EF Core 通过提供程序插件 API 与 SQL Server、Azure SQL 数据库、SQLite、Azure Cosmos DB、MySQL、PostgreSQL 和其他数据库一起使用(微软官方出品)。
追逐时光者
2024/09/14
2230
Entity Framework Plus: 让 EF Core 开发如虎添翼
浅析Entity Framework Core中的并发处理
本文讲述如何使用Entity Framework Core来实现一个乐观并发控制,并介绍在.NET Core中使用DbContext进行数据库操作时的一些常见问题和解决方案。
GuZhenYin
2018/01/04
2.8K0
浅析Entity Framework Core中的并发处理
【ASP.NET Core 基础知识】--数据库连接--使用Entity Framework Core进行数据库访问
Entity Framework Core(简称EF Core)是微软推出的一个轻量级版的Entity Framework,它是一个开源的、跨平台(Windows、Linux和macOS)的对象关系映射(ORM)框架。EF Core 旨在提供快速的数据访问和强大的数据库操作功能,同时保持较低的资源占用。 EF Core 支持与多种数据库系统的集成,包括 SQL Server、SQLite、MySQL、PostgreSQL 和 Oracle 等。它提供了 Code First 开发方法,允许开发人员通过代码来定义模型、配置映射关系和创建数据库。此外,EF Core 还支持数据迁移,使得在开发过程中数据库模式的变更更加容易管理和部署。 EF Core 与传统的 Entity Framework (EF) 相比,具有以下特点:
喵叔
2024/05/24
6990
推荐阅读
相关推荐
EF Core关系配置
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验