EF Core 3.0 Preview 9 的2个小坑
之前我们的数据库服务器使用的是 SQL Server 2008 R2 ,由于从 EF Core 3.0 Preview 6 开始不支持 UseRowNumberForPaging ,只能停留在 EF Core 3.0 Preview 5 ,无法继续升级。后来终于将数据库升级到了 SQL Server 2016 ,赶紧将 EF Core 升级到最新版 3.0 Preview 9 ,结果却发现了 EF Core 3.0 Preview 9 的2个小坑(3.0 正式版中也存在)。
第1个小坑
EF Core 3.0 会生成的多余 IS NOT NULL ,让生成的 SQL 语句非常啰嗦,冗长得不忍目睹。
SELECT ...
FROM [blog_Content] AS [b]
WHERE ((((([b].[BlogID] = @__blogId_0) AND @__blogId_0 IS NOT NULL) AND ([b].[IsExist] = CAST(1 AS bit))) AND (((([b].[PostType] | @__type_1) = @__type_1) AND ([b].[PostType] | @__type_1 IS NOT NULL AND @__type_1 IS NOT NULL)) OR ([b].[PostType] | @__type_1 IS NULL AND @__type_1 IS NULL))) AND (((([b].[PostConfig] & @__config_2) = @__config_2) AND ([b].[PostConfig] & @__config_2 IS NOT NULL AND @__config_2 IS NOT NULL)) OR ([b].[PostConfig] & @__config_2 IS NULL AND @__config_2 IS NULL)))
github 上的相关 issue: Queries really slow due to null checks
注:这个坑坑人不浅,会造成 SQL Server 数据库 CPU 100% ,详见 阿里云 RDS 数据库又发 CPU 近 100% 的“芯脏病”
第2个小坑
EF Core 3.0 对 Projection 的支持有问题,不管 Mapster 的 ProjectToType 还是 AutoMapper 的 ProjectTo ,生成的 SQL 语句中 SELECT 的是实体的字段,而不是 DTO 的字段,比如下面的 SQL 语句。
SELECT DTO字段
FROM (
SELECT TOP(@__p_3) 实体字段
FROM [blog_Content] AS [b]
LEFT JOIN [blog_DiggScore] AS [b0] ON [b].[Id] = [b0].[EntryID]
WHERE ...
ORDER BY [b0].[DiggCount] DESC
) AS [t]
LEFT JOIN [blog_DiggScore] AS [b1] ON [t].[Id] = [b1].[EntryID]
ORDER BY [t].[DiggCount] DESC
后来同事排查后发现,把 ProjectToType 移动到 OrderBy 以及 Take/Skip 语句之前可以避开这个问题。
EF Core 3.0 Preview 9 的2个小坑的更多相关文章
- .NetCore技术研究-EntityFramework Core 3.0 Preview
前段时间.Net Core 3.0 发布了,Entity Framework Core 3.0 也发布了Preview版.假期用了一上午大致研究了一遍,同时又体验了一把Visual Studio 20 ...
- 【译】宣告推出.NET Core 3.0 Preview 7(英雄的黎明)
今天,我们宣布推出.NET Core 3.0 Preview 7.我们已经从创建新特性阶段过渡到了完善版本阶段.对于其余的预览版,我们将把重点放在质量(改进)上. 在Windows,macOS和Lin ...
- [翻译] .NET Core 3.0 Preview 7 发布
原文: Announcing .NET Core 3.0 Preview 7 今天,我们宣布推出 .NET Core 3.0 Preview 7 .我们的工作已经从创建新功能过渡到打磨版本.预计剩余的 ...
- [翻译] .NET Core 3.0 Preview 9 发布
原文: Announcing .NET Core 3.0 Preview 9 今天,我们宣布推出 .NET Core 3.0 Preview 9.就像 Preview 8 一样,我们专注于打磨 .NE ...
- .NET Core 3.0 Preview 9 发布
翻译自官方博客 今天,我们宣布推出.NET Core 3.0 Preview 9.就像预览版8一样,我们专注打磨最终版本的.NET Core 3.0,而不是添加新功能.如果这些最终版本看起来不像早期预 ...
- .Net Core-3.0-新闻:宣告推出.NET Core 3.0 Preview 7
ylbtech-.Net Core-3.0-新闻:宣告推出.NET Core 3.0 Preview 7 1.返回顶部 1. 今天,我们宣布推出.NET Core 3.0 Preview 7.我们已 ...
- 【译】Announcing Entity Framework Core 5.0 Preview 5
今天我们宣布EF Core 5.0发布第五个预览版. 1 先决条件 EF Core 5.0 的预览版要求 .NET Standard 2.1.这意味着: EF Core 5.0 在 .NET Cor ...
- EF Core 1.0 和 SQLServer 2008 分页的问题
EF Core 1.0 在sqlserver2008分页的时候需要指定用数字分页. EF Core1.0 生成的分页语句中使用了 Featch Next.这个语句只有在SqlServer2012的时候 ...
- ASP.NET Core 开发-Entity Framework (EF) Core 1.0 Database First
ASP.NET Core 开发-Entity Framework Core 1.0 Database First,ASP.NET Core 1.0 EF Core操作数据库. Entity Frame ...
随机推荐
- 个人app如何收集用户日志
版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/147 个人app如何收集用户日志,相信不少人对这个话题感兴 ...
- 服务守护DOS脚本
创建一个批处理文件,复制以下内容至文件中并保存,右键文件名,以管理员身份运行. @@@code @echo off @echo 请使用管理员身份运行此脚本 rem 运行前先打开文件修改下列变量: ...
- 数据库事务系列-MySQL跨行事务模型
说来和MySQL倒是有缘,毕业的第一份工作就被分配到了RDS团队,主要负责把MySQL弄到云上做成数据库服务.虽说整天和MySQL打交道,但说实话那段时间并没有很深入的理解MySQL内核,做的事情基本 ...
- C# List、Array、Dictionary之间相互转换
Array转换为List List转换为Array Array转Dictionary Dictionary转Array List转Dictionary Dictionary转List IQueryab ...
- IDE开发小技巧-快速引包/替换关键词
快速引包 Ctrl+Shift+O 快速搜索/查找替换 Ctrl+F
- [译]Vulkan教程(24)索引buffer
[译]Vulkan教程(24)索引buffer Index buffer 索引buffer Introduction 入门 The 3D meshes you'll be rendering in a ...
- 经验之谈-switch结构常见错误的分析与处理
1.缺少break语句 本来只想输出“出任武林盟主”可输出结果为 错误分析:在 switch结构中,每一个case语句块后面如果不写 break语句, switch就会 直接往下面的case语句块运行 ...
- C++ 词汇表
C++词汇表 A abort() 特殊函数 如果一个函数抛出异常,但在通往异常函数的调用链中找不到与之匹配的catch,则该程序通常以此函数调用终止 abs ...
- [灵魂拷问]MySQL面试高频100问(工程师方向)
作者:呼延十 juejin.im/post/5d351303f265da1bd30596f9 前言 本文主要受众为开发人员,所以不涉及到MySQL的服务部署等操作,且内容较多,大家准备好耐心和瓜子矿泉 ...
- Java - 包装类 常量池
概述: 在Java中存在一些基本数据类型,这些基本数据类型变量,不能像其他对象一样调用方法,属性.... 一些情况下带来一些问题,包装类就是为了解决这个问题而出现 包装类可以使得这些基础数据类型,拥有 ...