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

异步查询 

当在远程数据库中执行查询时,同步查询可能会阻止当前线程,异步查询可避免阻止线程,这有助于避免冻结户端界面, 异步操作还可以增加 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!")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/303485.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 进程同步代码_java 实现进程间的同步(源代码)

操作系统课程设计&#xff1a;实现进程间的同步。 有问题留言import java.util.concurrent.Semaphore; /******** 信号量 *******/ class Sign { final static int NUMS 6; // 进程的数目 final static int RUN 1; // 运行完 final static int STOP 0; // 阻塞态 static int…

CSS日常公用样式与一些解决方案

一、自己总结的公用样式解析html, body, div, p, ul, li, dl, dt, dd, h1, h2, h3, h4, h5, h6, form, input, select, button, textarea, iframe, table, th, td { margin: 0; padding: 0; }img { border: 0 none; vertical-align: top; }ul, li { list-style-type: none; }h1…

上班族吐槽大集合:那些发生在公司的傻X奇遇

“明明不需要加班&#xff0c;到了点却偏偏没人起身走。”—— 小爱“头脑风暴&#xff0c;人越多效率越低下&#xff0c;最后风暴出来的东西也很难落实。”—— 好奇心“只是申请个办公用品&#xff0c;需要人事处签字&#xff0c;行政部签字&#xff0c;总监签字&#xff0c;…

C# 9 record 并非简单属性 POCO 的语法糖

最近升级专案到大统一 .NET 5 并使用 C#9 语法尝试改写套件,发现之前以为 record 只是简单属性 POCO 的简化语法糖的认知是错误。另外因为 POCO 属于需定义口语词&#xff0c;这边在本文定义简单属性 POCO 为 public class 类别 {public string ID{get;set}/*略*/} 只有属性的简…

java中注解的解析_全面解析Java中的注解与注释

注解一、什么是 Annotation&#xff1f; (注解 or 注释)Annotation, 准确的翻译应该是 -- 注解。 和注释的作用完全不一样。Annotation 是JDK5.0及以后版本引入的一个特性。 与类、接口、枚举是在同一个层次&#xff0c;可以成为java 的一个类型。语法是以 开头简单来说&#x…

安装配置Mysql主从

环境&#xff1a; 主从服务器上的MySQL数据库版本同为5.1.34 主机IP&#xff1a;192.168.0.1 从机IP&#xff1a;192.168.0.2 一. MySQL主服务器配置 1.编辑配置文件/etc/my.cnf # 确保有如下行 server-id 1 log-binmysql-bin binlog-do-dbmysql #需要备份的数据库名&#xf…

玩的时候好好玩,学的时候好好学。不做半吊子

要用大块的时间学习&#xff0c;玩的时间也不能短。比如&#xff1a;一周七天六天认认真真学习&#xff0c;不要某天下午一犹豫懒惰就不去实验室了&#xff0c;没有任何目的度过了无聊的下午。同时又没有玩的计划所以&#xff0c;玩的也不开心。 现在要做到的就是正常的计划不要…

java实现思维导图_Java并发(思维导图)

1&#xff0c;线程状态转换无限期等待&#xff1a;限期等待&#xff1a;线程生命流程&#xff1a;2&#xff0c;实现方式代码实现样例【三种方式】&#xff1a;packagecom.cnblogs.mufasa.demo2;importjava.util.concurrent.Callable;public class test1_Runnable implementsRu…

这本免费小书,带你征服 GitHub!

GitHub 漫游指南&#xff0c;一本有趣又通俗的 GitHub 教程&#xff0c;想要成为 star 之王么&#xff1f;今天给大家分享一份通俗易懂的 GitHub 学习教程&#xff0c;即《GitHub 漫游指南》。看过了不下十套 GitHub 教程了&#xff0c;小编愿称它为最强&#xff01;虽然没有 G…

jQuery formValidator表单验证插件4.1.0 下载 演示 文档 可换肤 代码生成器

更新记录: 2011/6/5 jQuery formValidator 4.1.0 ver申明&#xff1a;1、所有DEMO引用jQuery类库的时候&#xff0c;类库后面直接跟了版本号——表示插件支持的最高类库版本号2、插件的命名&#xff1a;插件名版本号&#xff0c;压缩版&#xff1a;插件名版本号min新增以下功能…

java context.write_Channel.write() 和 ChannelHandlerContext.write() 的区别

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。看了下netty 源代码, 终于明白了Channel.write() 和 ChannelHandlerContext.write() 的区别了网上说的都不是很清楚首先注明我的netty版本io.nettynetty-all4.0.36.FinalChannelPipeline处理ChannelH…

美国劳工部揭露中国女人大数据,看完彻底傻眼了……

导读&#xff1a;“中国人的勤奋&#xff0c;令世界惊叹和汗颜&#xff0c;甚至有一点恐惧。”——科斯&#xff0c;诺贝尔经济学奖得主那么中国人的“勤奋”能否用数据来量化一下呢&#xff1f;答案是可以的。另外&#xff0c;如果以性别来区分&#xff0c;究竟是中国男性更勤…

计算机女神,互联网第一夫人!

大家好&#xff0c;我是鱼皮&#xff0c;今天带大家认识一位计算机领域的女神&#xff0c;有关她的故事非常有趣&#xff01;先聊聊我是如何认识女神的吧。那是我在大四做毕业设计的时候&#xff0c;误打误撞地选了一个图像处理相关的课题&#xff0c;要做一个显微图像处理分析…

mysql安装目录centos_CentOS mysql安装系统方法

CentOS linux由于同时具有与RHEL的兼容性和企业级应用的稳定性&#xff0c;又允许用户自由使用&#xff0c;因此得到了越来越广泛的应用。1]CentOS mysql安装解压[rootlocalhost root]# cd /usr/local/mysql/software[rootlocalhost software]# lsmysql-4.0.16.tar.gz[rootloca…

不吃不喝,两周业余时间研究(cisco SCE CM )

最近比较忙&#xff0c;比较烦&#xff0c;不想说话&#xff0c;想打人&#xff0c;想发脾气了&#xff1b; 这几天比较累&#xff0c;相当的累&#xff0c;这两个星期什么都不顺心&#xff0c;心情也很低落 这两个星期维护的移动、广电网络都出现问题了&#xff0c;o(︶︿︶)o…

NET问答: 如何从 string 中挖出所有的 number ?

咨询区 van:我现在有一个需求&#xff0c;想从 string 中找到所有的 number 并提取出来。举例如下&#xff1a;string test "1 hello" string test1 " 1 world" string test2 "helloworld 99"请问我该如何做&#xff1f;回答区 Tabares:这个简…

大数据告诉你:学历真的能改变命运

央视新闻曾做过关于高考的调查&#xff0c;结果有七成网友支持高考取消数学&#xff0c;看到新闻后&#xff0c;有一位网友却一针见血地评论道&#xff1a;数学考试存在的意义就是把这七成网友筛选掉。的确&#xff0c;虽然买菜不需要专业数学知识&#xff0c;但数学可以决定我…

mysql控制台教程视频教程_mysql 控制台操作

一、连接mysql数据库1.首先打开cmd进入dos窗口2.切换至目录&#xff1a;D:\MySql5.0\mysql-5.0.51b-win32\bin(即&#xff1a;mysql安装目录下面的bin目录&#xff0c;该目录内有很多exe执行文件)3.键入命令&#xff1a;mysql -uroot -p 回车&#xff0c;提示输入密码&#xff…

Dapr微服务应用开发系列5:发布订阅构建块

题记&#xff1a;这篇介绍发布订阅构建块&#xff0c;这是对事件驱动架构设计的一种实现落地。注&#xff1a;对于“Building Blocks”这个词组的翻译&#xff0c;我之前使用了“构件块”&#xff0c;现在和官方文档&#xff08;Dapr中文社区的贡献&#xff09;保持一致&#x…

【资源】机器学习资料包来袭

近几年&#xff0c;机器学习一直很火&#xff0c;小编也有意识地收集了机器学习相关的资源&#xff0c;经过长时间的积累和沉淀&#xff0c;已经拥有将近17G的吴恩达老师、李宏毅老师和王保明老师机器学习资料和视频。现在&#xff0c;小编准备将这些资料免费分享给大家&#x…