EF Core查询标签TagWith
概述
在使用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相关推荐
- 给 EF Core 查询增加 With NoLock
给 EF Core 查询增加 With NoLock Intro EF Core 在 3.x 版本中增加了 Interceptor,使得我们可以在发生低级别数据库操作时作为 EF Core 正常运行的 ...
- 讨论过后而引发对EF 6.x和EF Core查询缓存的思考
前言 最近将RabbitMQ正式封装引入到.NET Core 2.0项目当中,之前从未接触过这个高大上的东东跟着老大学习中,其中收获不少,本打算再看看RabbitMQ有时间写写,回来后和何镇汐大哥探讨 ...
- ef 多个左联接查询_.NET 云原生架构师训练营(模块二 基础巩固 EF Core 查询)--学习笔记...
2.4.5 EF Core -- 查询 关联数据加载 客户端与服务端运算 跟踪与不跟踪 复杂查询运算 原生 SQL 查询 全局查询筛选器 关联数据加载 学员和助教都在项目分组中,调整模型,删除 Ass ...
- .NET 云原生架构师训练营(模块二 基础巩固 EF Core 查询)--学习笔记
2.4.5 EF Core -- 查询 关联数据加载 客户端与服务端运算 跟踪与不跟踪 复杂查询运算 原生 SQL 查询 全局查询筛选器 关联数据加载 学员和助教都在项目分组中,调整模型,删除 Ass ...
- [翻译 EF Core in Action 2.3] 理解EF Core数据库查询
Entity Framework Core in Action Entityframework Core in action是 Jon P smith 所著的关于Entityframework Cor ...
- 查缺补漏系统学习 EF Core 6 - 原始 SQL 查询
推荐关注「码侠江湖」加星标,时刻不忘江湖事 这是 EF Core 系列的第五篇文章,上一篇文章盘点了 EF Core 中的几种数据查询方式. 但是有有时候,我们可能无法用标准的 LINQ 方法完成查询 ...
- 查缺补漏系统学习 EF Core 6 - 数据查询
这是 EF Core 系列的第四篇文章,上一篇文章讲述了 EF Core 中的实体迁移与数据播种. 这篇文章盘点一下 EF Core 的几种数据查询方式,内容较多分上下两篇. 点击上方或后方蓝字,阅读 ...
- 基于.Net Core Web MVC的图书查询系统——第四章,添加模型并使用EF Core生成基架自动生成控制器和视图
基于.Net Core Web MVC的图书查询系统 第一章,.Net Core Web MVC配置身份验证和注册登录功能并修改默认页面 第二章,.Net Core Web MVC配置邮件发送服务 第 ...
- .NET Core使用EF分页查询数据报错:OFFSET语法错误问题
在Asp.Net Core MVC项目中使用EF分页查询数据时遇到一个比较麻烦的问题,系统会报如下错误: 分页查询代码: 1 var newQuery = query.Skip((condition. ...
最新文章
- java之集合框架一Collection接口
- java最基础语句,Java基础:Java语句
- 1.6 Java字节流的使用:字节输入/输出流、文件输入/输出流、字节数组输入/输出流
- oracle .ctl 是什么文件_Oracle误删dual表怎么办?这里教你怎么恢复
- 商用服务器系统比较好,商用服务器操作系统都用哪种
- VMware提示此主机支持Intel VT-x,但Intel VT-x处于禁用状态怎么解决
- 中内连和外联的去区别_喜欢和爱的区别是什么?“爱”的繁体字会告诉你答案...
- CSS之clearfix清除浮动
- python求100被3he7整除_PYTHON练习题测验
- android 手机 基站定位软件,安卓手机基站+GPS定位源码
- AIDA64内存与缓存测试过了算稳定吗_KLEVV BLOT XR DDR4内存:锐龙平台兼容性测试
- python图像风格迁移_Python 超简单实现9种图像风格迁移
- 上海内推 | 上海人工智能实验室招聘计算视觉实习生(NeRF神经渲染方向)
- VEX到底是一种什么机器人?和乐高有什么区别?
- 多进程动态规划破解微信小程序水排序谜题
- 做数据分析为何要学统计学(1)——样本分布
- HTML中基于表单的文件上传(post,get)
- arch配置之百度网盘
- 五行代码实现图像识别(深入版)
- 浅谈BGP主机与其他双线主机的区别
热门文章
- 数学在计算机科学上的应用文献,浅谈数学在计算机科学及应用中的作用
- python结课报告_Python数据分析课程到底是学什么内容的?
- 编译安装PHP出现configure: error: MySQL configure failed. Please check config.log的解决方法
- 【Linux】【Services】【nfs】nfs安装与配置
- return view详解
- Ruby 学习笔记3
- 【27前端】base标签带有href属性会让chrome里的svg元素url失效
- thinkphp与php共享session
- 每日一小练——按字典顺序列出全部子集
- C#正则表达式编程(四)转致周公