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 ...
随机推荐
- linux bash基础特性
使用history命令,取得命令历史,当bash进程结束后,会把命令历史存放到文件中,下次开机还能看到命令历史. 定制history:通过设置环境变量,来定制history 环境变量$HISTSIZE ...
- cookie、localStorage 和 sessionStorage 的使用以及区别
localStorage 和 sessionStorage 的增删改查: 存储数据: sessionStorage.setItem('key', 'sessionStorage的值'); // 存储数 ...
- excel文字随单元格大小变化
对于不想因为伸缩等,造成部分文字看不见 或者 格式变形等,可以采用缩小字体或适应文字: 1.excel中可以选择缩小字体填充,这样,缩小excel就不怕了: 2.word中,excel表设置适应文字 ...
- Mysql安装及常用命令
部分内容转载于 https://www.linuxidc.com/Linux/2016-09/135288.htm https://www.cnblogs.com/rays-/p/8081798.ht ...
- gitlab runner使用docker报错(x509: certificate signed by unknown authority)定位
如果gitlab runner使用docker,docker是普通配置,配置好后,runner就可以正常执行任务了. 另外一个环节Docker配置了tls加密连接,添加runner后,runner的配 ...
- 浅谈Httpmodules
HttpModule是ASP.NET过滤器,可以理解为HTTP请求的必经之地我们只要实现IHttpModule接口,就可以取代HttpModule namespace BookShop.Handler ...
- C#构造函数、属性的应用
using System; using System.Collections.Generic; using System.Text; namespace test { class Program { ...
- ASP.NET Core 2.2 WebApi 系列【五】MiniProfiler与Swagger集成
MiniProfiler 是一款性能分析的轻量级程序,可以基于action(request)记录每个阶段的耗时时长,还是可以显示访问数据库时的SQL(支持EF.EF Code First)等 一.安装 ...
- Python 你见过三行代码的爬虫吗
------------恢复内容开始------------ 每次讲爬虫的时候都会从“发送请求” 开始讲,讲到解析页面的时候可能大部分读者都会卡住,因为这部分确实需要一点XPATH或者CSS选择器的前 ...
- 父子间的通信,以及ref
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...