Entity FrameWork(简称 EF)以面向对象的方式操作数据库给开发人员带来了很大的便利性,但其性能问题从面世以来就一直就被广大的 .NET 生态开发技术人员所吐槽,然而,它真的那么不堪使用吗?试试下面这 6 个小技巧,瞬间极大提升 EF Core 性能:

  1. AsNoTracking

    在项目开发的时候,如果查询出来的对象不会被修改、删除等,那么在查询的时候,可以启用AsNoTracking,这样就能降低EF Core的资源占用

    Book[] books = ctx.Books.AsNoTracking().Take(3).ToArray();
    Book b1 = books[0];
    b1.Title = "abc";
    EntityEntry entry1 = ctx.Entry(b1);
    Console.WriteLine(entry1.State);
  2. 通过一条SQL语句高效更新实体类

    Book b1 = new Book {Id=10};
    b1.Title = "yzk";
    var entry1 = ctx.Entry(b1); //直接创建实体对象
    entry1.Property("Title").IsModified = true; //标记 Title 字段被修改
    Console.WriteLine(entry1.DebugView.LongView);
    ctx.SaveChanges(); //只生成这个字段的更新的SQL语句
  3. 用一条SQL语句高效删除数据

    Book b1 = new Book { Id = 28 };
    ctx.Entry(b1).State = EntityState.Deleted;
    ctx.SaveChanges();
  4. 关于 Find 和 FindAsync 方法

    Find 或者 FindAsync 方法(以下简称为Find)会先在上下文查找这个对象是否已经被跟踪,如果对象已经被跟踪,就直接返回被跟踪的对象,只有在本地没有找到这个对象时,EF Core 才去数据库查询,而 Single 方法则一直都是执行一次数据库查询。因此用 Find 方法有可能减少一次数据库查询,性能更好。但是如果在对象被跟踪之后,数据库中对应的数据已经被其他程序修改了,则 Find 方法可能会返回旧数据。

  5. 如何在 EF Core 中高效地删除、更新数据?

    • 使用原生 SQL,但不太符合模型驱动、分层隔离等思想
    • 使用其它开源库如 Zack.EFCore.Batch
  6. 全局查询筛选器

    EF Core 支持在配置实体类的时候,为实体类设置全局查询筛选器,EF Core 会自动将全局查询筛选器应用于涉及这个实体类型的所有 LINQ 查询。这个功能常见的应用场景有 "软删除" 和 "多租户"

    Fluent API配置全局查询筛选器:
    builder.HasQueryFilter(b=>b.IsDeleted==false) 忽略全局查询筛选器
    ct x.Books.IgnoreQueryFilters().Where(b => b.Title.Contains("o")).ToArray();

试试这 6 个小技巧,提升 EF Core 性能的更多相关文章

  1. IT咨询顾问:一次吐血的项目救火 java或判断优化小技巧 asp.net core Session的测试使用心得 【.NET架构】BIM软件架构02:Web管控平台后台架构 NetCore入门篇:(十一)NetCore项目读取配置文件appsettings.json 使用LINQ生成Where的SQL语句 js_jquery_创建cookie有效期问题_时区问题

    IT咨询顾问:一次吐血的项目救火   年后的一个合作公司上线了一个子业务系统,对接公司内部的单点系统.我收到该公司的技术咨询:项目启动后没有规律的突然无法登录了,重新启动后,登录一断时间后又无法重新登 ...

  2. EF core 性能调优

    Entity Framework Core performance tuning – a worked example Last Updated: February 25, 2019 | Create ...

  3. [小技巧]ASP.NET Core中如何预压缩静态文件

    原文地址:Pre-compressed static files with ASP.NET Core 作者:Gunnar Peipman 译者:Lamond Lu 译文:https://www.cnb ...

  4. EF Core性能优化(一)

    跟踪查询 返回实体类型的查询是默认会被跟踪的. 这表示可以更改这些实体实例,然后通过 SaveChanges() 持久化这些更改.非跟踪查询 在只读方案中使用结果时,非跟踪查询十分有用. 可以更快速地 ...

  5. .NET Core实用技巧(一)如何将EF Core生成的SQL语句显示在控制台中

    目录 .NET Core实用技巧(一)如何将EF Core生成的SQL语句显示在控制台中 前言 笔者最近在开发和维护一个.NET Core项目,其中使用几个非常有意思的.NET Core相关的扩展,在 ...

  6. .Net EF Core千万级数据实践

    .Net 开发中操作数据库EF一直是我的首选,工作和学习也一直在使用.EF一定程度的提高了开发速度,开发人员专注业务,不用编写sql.方便的同时也产生了一直被人诟病的一个问题性能低下. EF Core ...

  7. YbSoftwareFactory 代码生成插件【二十一】:Web Api及MVC性能提升的几个小技巧

    最近在进行 YbSoftwareFactory 的流程功能升级,目前已经基本完成,现将用到的一些关于 Web Api 及 MVC 性能提升的一些小技巧进行了总结,这些技巧在使用.配置上也相当的简单,但 ...

  8. EF Core 1.0中使用Include的小技巧

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:由于EF Core暂时不支持Lazy Loading,所以利用Include来加载额外 ...

  9. 10个提升MySQL性能的小技巧

    从工作量分析到索引的三条规则,这些专家见解肯定会让您的MySQL服务器尖叫. 在所有的关系数据库中,MySQL已经被证明了完全是一头野兽,只要通知停止运行就绝对不会让你多等一秒钟,使你的应用置于困境之 ...

  10. iOS Xcode 小技巧,提升理解查询能力,Command + 点击鼠标右键 Jump to Definition等

    前言: 介绍下Xcode 小技巧,以及一下快捷键,让你调试程序更加出类拔萃,安排! Command + 点击鼠标右键 Jump to Definition,可能你平时也在用,但是你明白全部的用法吗,试 ...

随机推荐

  1. oracle-应用连接数激增测试

    在生产环境遇见过表的连接数过高,导致系统宕机的问题,操作上是由于在大表上建立索引,造成全表锁.故手动在表加表级锁,表上的应用不停,查看Oracle数据库连接数是否激增. 1 应用正常运行,查看当前数据 ...

  2. MySQL误删恢复方法2

    实际工作中总会发生数据误删除的场景,在没有备份情况下,如何快速恢复误删数据就显得非常重要. 本文基于MySQL的binlog日志机制,当日志格式设置为"binlog_format=ROW&q ...

  3. 【学习】fhq-treap

    fhq-treap 是一种好写.复杂度低,且功能的优秀数据结构,涵盖了 treap 几乎所有的功能,其巧妙之处,就在于运用分离和合并两种操作代替了旋转操作. 1. BST 的定义 (摘自 OI Wik ...

  4. SSH 免秘钥登录

    yum -y install expect ssh-keygen -t rsa -P "" -f /root/.ssh/id_rsa for i in 192.168.1.11 1 ...

  5. ac自动机|非自动ac机(当然也有) 笔记+图解

    自动ac机 system("poweroff"); // linux system("shutdown -s -f"); // windows ac自动机 在计 ...

  6. JS动态在父元素里追加元素——insertAdjacentHTML

    insertAdjacentHTML() 方法将指定的文本解析为 Element 元素,并将结果节点插入到 DOM 树中的指定位置.它不会重新解析它正在使用的元素,因此它不会破坏元素内的现有元素.这避 ...

  7. Golang后端大厂面经!

    大家好,我是阳哥.专注Go语言的学习经验分享和就业辅导. 之前分享了很多 Golang 后端的大厂面经,不少同学在催更新,这篇给大家继续安排. 本文来自一位同学的投稿,面试深X服的面经汇总,前半部分主 ...

  8. Docker从了解到部署应用的详细教程

    一.Docker基础知识 1.Docker (1)Docker可以让开发者打包他们的应用以及依赖包到一个轻量级.可以移植的容器中,然后发布到任何的linux机器上,可以实现虚拟化: (2)Docker ...

  9. Chromium gclient使用

    gclient 是由 Google 用 Python 开发的一套跨平台的git仓库管理工具,它的作用类似 git 的 submodule,用来将多个git仓库组成一个solution进行管理,比如ch ...

  10. 【日常收支账本】【Day02】通过PyCharm集成QtDesigner和PyUIC快速创建界面

    一.集成QtDesigner和PyUIC PyCharm集成QtDesigner和PyUIC教程 二.在QtDesigner中画出窗体 1. 主界面 编辑账本: 新增.修改或删除记录 可视化账本:通过 ...