异步查询

当在远程数据库中执行查询时,同步查询可能会阻止当前线程,异步查询可避免阻止线程,这有助于避免冻结户端界面, 异步操作还可以增加 Web 应用程序的吞吐量,可以在数据库操作完成前释放线程去处理其他请求。

EF Core 不支持在同一上下文实例上运行多个并行操作。 应始终等待操作完成,然后再开始下一个操作。 这通常是通过在每个异步操作上使用 await 关键字完成的。

Entity Framework Core 提供了一组异步扩展方法,可用于执行异步查询。例如:

ToListAsync()、ToArrayAsync()、SingleAsync() ,如果看到 Async 结尾,一般都是异步方法,这也是微软的命名约定,希望您也遵守。

对于部分 LINQ 运算符(如 Where(...)、OrderBy(...) 等),没有对应的异步版本,因为这些方法仅用于构建 LINQ 表达式树,而未将查询发送到数据库中执行,只有用到结果时才会去数据库查询,这是 IQueryable 天生的特性,之前我们讲过。

public async Task<List<Blog>> GetBlogsAsync()

{

using (var context = new BloggingContext())

{

return await context.Blogs.ToListAsync();

}

}

  

异步编程 <https://docs.microsoft.com/zh-cn/dotnet/csharp/async>

查询的工作原理

  1. 查询编写的所由表达式由 EF Core 处理,根据不同的数据库提供程序生成与 LINQ 等效的 SQL 语句。

    A:查询到的数据会被缓存,以便每次执行相同数据查询时耗费性能。

  2. 查询表达式会传递到数据库提供程序
    A:提供程序会识别出查询的哪些部分可以在数据库中求值进行,哪些只能在客户端进行,哪些根本就没办法进行。
    B:对于能进行数据库查询的操作,生成对应的 SQL 语句。
    C:一个或多个查询会被发送到数据库并返回结果集。这里返回的不是实体对象集合,而是数据集。

  3. 对于结果集中的每一项
    A:如果是跟踪查询(默认跟踪),EF 会检查数据项是已存在于跟踪器中。如果是,则返回现有实体,如果不是,则创建实体,并将实体添加到跟踪器中。
    B:如果这个查询是非跟踪查询,EF 会检查数据是否表示此查询结果集中的现有实体,如果是,则会返回现有实体 ,如果不是,则会创建新实体并返回该新实体。

调用 LINQ 运算符时,只会构建查询在内存中的表示形式。只有在使用结果时,查询才会发送到数据库。

导致查询发送到数据库的最常见操作如下:

  • 在 for 或者 foreach 循环中循环访问结果

  • 使用 ToList、ToArray、Single、Count 等操作

  • 将查询结果数据绑定到 UI 界面时。

查询注释标记

使用 TagWith() 方法对 LINQ 生成的 SQL 语句进行注释,方便阅读。

1

context.Friends.TagWith("This is my spatial query!")

【EFCORE笔记】异步查询工作原理注释标记相关推荐

  1. 孙鑫vc++ 第六课 笔记 菜单的工作原理及编写应用

    菜单的工作原理及编写应用 今天赶了2场酒,累死了,但还是坚持看完了第6课,写了点笔记,大家鼓励鼓励嘛,不要看看就走了 1.菜单如果选择了pop-up属性,是不能响应命令的    菜单idm_test- ...

  2. Servlet系列学习笔记1 --- Servlet工作原理和生命周期

    目录 一.Servlet API概述 二.Servlet工作原理 三.Servlet接口 四.Servlet的生命周期 五.ServletRequest 六.ServletResponse Servl ...

  3. Android学习笔记View的工作原理

    自定义View,也可以称为自定义控件,通过自定义View可以使得控件实现各种定制的效果. 实现自定义View,需要掌握View的底层工作原理,比如View的测量过程.布局流程以及绘制流程,除此之外,还 ...

  4. 笔记:摄像头工作原理和色彩空间简介

    摄像头的基本工作原理: 景物通过镜头(LENS)生成的光学图像投射到图像传感器表面上,然后转换为电信号,经过A/D(模拟信号)转换后为数字图像信号,再送到数字图像处理器(DSP)中加工,就可以在显示器 ...

  5. 从一条select语句看Oracle数据库查询工作原理

    假如,我们现在利用Select语句从数据库查询数据,Oracle数据库是如何运作的呢?从中我们可以领悟到什么呢?下面,就结合一条简单的select语句,看看Oracle数据库后台的运作机制.这对于我们 ...

  6. solr查询工作原理深入内幕

    1.什么是Lucene? 作为一个开放源代码项目,Lucene从问世之后,引发了开放源代码社群的巨大反响,程序员们不仅使用它构建具体的全文检索应用,而且将之集成到各种系统软件中去,以及构建Web应用, ...

  7. 低功耗蓝牙cc2541学习笔记之协议栈工作原理

  8. 学习笔记-FIR滤波器工作原理

    一.什么是FIR数字滤波器 FIR滤波器的全称是Finite Impulse Respond Filter.中文全称是有限脉冲响应滤波器,它也叫做非递归型滤波器. 它的作用和所有的滤波器一样,通过算法 ...

  9. 【单片机笔记】运算放大器工作原理

    不多赘述,请看原文 http://www.eepw.com.cn/article/271351.htm

最新文章

  1. SDUTOJ 1293 乘积最大的分解(数论)
  2. linux qt5.7下打地鼠源程序,基于QT的打地鼠游戏
  3. oracle 主键_Oracle约束详解
  4. sketch 将动图转换为json_开源 | Picasso:sketch设计稿智能解析工具
  5. codeforces 344A-C语言解题报告
  6. flask-02-简单认识
  7. ASP.NET-关于Global.asax的作用
  8. java+io体系结构图_Java IO 体系结构
  9. Qemu-ARM-Ubuntu 实验一 环境设定
  10. Graph_editor——好用的画图软件,你会用吗?
  11. Java小开发(车辆信息管理系统)
  12. IP地址如何分的五类
  13. Docker安装加速器
  14. 小米盒子显示连不上服务器,小米盒子连不上WiFi?这七个技巧绝对管用
  15. HDU4415 Assassin’s Creed
  16. Jmeter监控之PerfMon Metrics Collector
  17. python分析谷歌浏览器的历史记录
  18. 阿里巴巴国际站产品标题优化技巧
  19. 秘密secret的几个应用场景
  20. 微信公众平台教程--素材编辑

热门文章

  1. 下午去银行办理按揭手续,不得已调休半天
  2. Shell_mysql命令以及将数据导入Mysql数据库
  3. 安装mongoDB遇见的一个路径问题
  4. 【BZOJ-2299】向量 裴蜀定理 + 最大公约数
  5. ios 轻扫手势_轻扫即可快速删除iOS计算器中的数字
  6. 棉花糖多少钱_如何在6.0棉花糖及更高版本中访问Android的正在运行的应用程序列表...
  7. Ubuntu Core 给物联网提供更多安全支持
  8. 微软 改变 开源【几个站点】
  9. 安装分布式文件系统MooseFS
  10. 读取数量不定的输入数据