概述

在使用EF Core的时候,有时候我们需要追踪它生成的sql语句,那么方法那么多,我们怎么知道对应的sql语句是在代码哪里呢,这时候就需要一个备注,

TagWith()能够帮助我们生成对应的注释信息。查询标记有助于将代码中的LINQ查询与日志中捕获的生成的SQL查询相关联。您使用新TagWith()方法注释LINQ查询:EF Core 2.2+中的TagWith是一项出色的功能,可以跟踪查询存储区中的查询,但您必须记住将其添加到所有查询中。

实现方法

var myLocation = new Point(1, 2);
var nearestPeople = (from f in context.People.TagWith("This is my spatial query!")orderby f.Location.Distance(myLocation) descendingselect f).Take(5).ToList();

此LINQ查询被转换为以下SQL语句:

-- This is my spatial query!SELECT TOP(@__p_1) [p].[Id], [p].[Location]
FROM [People] AS [p]
ORDER BY [p].[Location].STDistance(@__myLocation_0) DESC

可以TagWith()在同一查询上多次调用。查询标签是累积的。例如,给定以下方法:

private static IQueryable<Person> GetNearestPeople(SpatialContext context, Point myLocation)=> from f in context.People.TagWith("GetNearestPeople")orderby f.Location.Distance(myLocation) descendingselect f;private static IQueryable<T> Limit<T>(IQueryable<T> source, int limit) => source.TagWith("Limit").Take(limit);

以下查询:

var results = Limit(GetNearestPeople(context, new Point(1, 2)), 25).ToList();

转换为:

-- GetNearestPeople-- LimitSELECT TOP(@__p_1) [p].[Id], [p].[Location]
FROM [People] AS [p]
ORDER BY [p].[Location].STDistance(@__myLocation_0) DESC

也可以使用多行字符串作为查询标签。例如:

var results = Limit(GetNearestPeople(context, new Point(1, 2)), 25).TagWith(@"This is a multi-line
string").ToList();

产生以下SQL:

-- GetNearestPeople-- Limit-- This is a multi-line
-- stringSELECT TOP(@__p_1) [p].[Id], [p].[Location]
FROM [People] AS [p]
ORDER BY [p].[Location].STDistance(@__myLocation_0) DESC

查询标签不可参数化:EF Core始终将LINQ查询中的查询标签视为包含在生成的SQL中的字符串文字。不允许将查询标记作为参数的已编译查询。

EF Core查询标签TagWith相关推荐

  1. 给 EF Core 查询增加 With NoLock

    给 EF Core 查询增加 With NoLock Intro EF Core 在 3.x 版本中增加了 Interceptor,使得我们可以在发生低级别数据库操作时作为 EF Core 正常运行的 ...

  2. 讨论过后而引发对EF 6.x和EF Core查询缓存的思考

    前言 最近将RabbitMQ正式封装引入到.NET Core 2.0项目当中,之前从未接触过这个高大上的东东跟着老大学习中,其中收获不少,本打算再看看RabbitMQ有时间写写,回来后和何镇汐大哥探讨 ...

  3. ef 多个左联接查询_.NET 云原生架构师训练营(模块二 基础巩固 EF Core 查询)--学习笔记...

    2.4.5 EF Core -- 查询 关联数据加载 客户端与服务端运算 跟踪与不跟踪 复杂查询运算 原生 SQL 查询 全局查询筛选器 关联数据加载 学员和助教都在项目分组中,调整模型,删除 Ass ...

  4. .NET 云原生架构师训练营(模块二 基础巩固 EF Core 查询)--学习笔记

    2.4.5 EF Core -- 查询 关联数据加载 客户端与服务端运算 跟踪与不跟踪 复杂查询运算 原生 SQL 查询 全局查询筛选器 关联数据加载 学员和助教都在项目分组中,调整模型,删除 Ass ...

  5. [翻译 EF Core in Action 2.3] 理解EF Core数据库查询

    Entity Framework Core in Action Entityframework Core in action是 Jon P smith 所著的关于Entityframework Cor ...

  6. 查缺补漏系统学习 EF Core 6 - 原始 SQL 查询

    推荐关注「码侠江湖」加星标,时刻不忘江湖事 这是 EF Core 系列的第五篇文章,上一篇文章盘点了 EF Core 中的几种数据查询方式. 但是有有时候,我们可能无法用标准的 LINQ 方法完成查询 ...

  7. 查缺补漏系统学习 EF Core 6 - 数据查询

    这是 EF Core 系列的第四篇文章,上一篇文章讲述了 EF Core 中的实体迁移与数据播种. 这篇文章盘点一下 EF Core 的几种数据查询方式,内容较多分上下两篇. 点击上方或后方蓝字,阅读 ...

  8. 基于.Net Core Web MVC的图书查询系统——第四章,添加模型并使用EF Core生成基架自动生成控制器和视图

    基于.Net Core Web MVC的图书查询系统 第一章,.Net Core Web MVC配置身份验证和注册登录功能并修改默认页面 第二章,.Net Core Web MVC配置邮件发送服务 第 ...

  9. .NET Core使用EF分页查询数据报错:OFFSET语法错误问题

    在Asp.Net Core MVC项目中使用EF分页查询数据时遇到一个比较麻烦的问题,系统会报如下错误: 分页查询代码: 1 var newQuery = query.Skip((condition. ...

最新文章

  1. java之集合框架一Collection接口
  2. java最基础语句,Java基础:Java语句
  3. 1.6 Java字节流的使用:字节输入/输出流、文件输入/输出流、字节数组输入/输出流
  4. oracle .ctl 是什么文件_Oracle误删dual表怎么办?这里教你怎么恢复
  5. 商用服务器系统比较好,商用服务器操作系统都用哪种
  6. VMware提示此主机支持Intel VT-x,但Intel VT-x处于禁用状态怎么解决
  7. 中内连和外联的去区别_喜欢和爱的区别是什么?“爱”的繁体字会告诉你答案...
  8. CSS之clearfix清除浮动
  9. python求100被3he7整除_PYTHON练习题测验
  10. android 手机 基站定位软件,安卓手机基站+GPS定位源码
  11. AIDA64内存与缓存测试过了算稳定吗_KLEVV BLOT XR DDR4内存:锐龙平台兼容性测试
  12. python图像风格迁移_Python 超简单实现9种图像风格迁移
  13. 上海内推 | 上海人工智能实验室招聘计算视觉实习生(NeRF神经渲染方向)
  14. VEX到底是一种什么机器人?和乐高有什么区别?
  15. 多进程动态规划破解微信小程序水排序谜题
  16. 做数据分析为何要学统计学(1)——样本分布
  17. HTML中基于表单的文件上传(post,get)
  18. arch配置之百度网盘
  19. 五行代码实现图像识别(深入版)
  20. 浅谈BGP主机与其他双线主机的区别

热门文章

  1. 数学在计算机科学上的应用文献,浅谈数学在计算机科学及应用中的作用
  2. python结课报告_Python数据分析课程到底是学什么内容的?
  3. 编译安装PHP出现configure: error: MySQL configure failed. Please check config.log的解决方法
  4. 【Linux】【Services】【nfs】nfs安装与配置
  5. return view详解
  6. Ruby 学习笔记3
  7. 【27前端】base标签带有href属性会让chrome里的svg元素url失效
  8. thinkphp与php共享session
  9. 每日一小练——按字典顺序列出全部子集
  10. C#正则表达式编程(四)转致周公