EF Core HasQueryFilter 的小坑
这是今天在实际项目中遇到的一个问题,Entity Framework Core 2.2 生成了下面的 SQL 语句,INNER JOIN 部分丑陋的 SQL 语句让人无法忍受。
SELECT TOP(@__p_1) [t].[ShortName] AS [EnterpriseShortName], [j].[Key], [j].[PositionName]
FROM [JobPosition] AS [j]
INNER JOIN (
SELECT [e].*
FROM [Offer].[Enterprise] AS [e]
WHERE [e].[IsActive] = 1
) AS [t] ON [j].[EnterpriseKey] = [t].[Key]
WHERE ((([j].[Status] = 1) AND ([t].[IsActive] = 1)) AND ([j].[ExpireDate] > GETDATE()))) AND ([j].[CategoryID] = @__categoryId_0)
使用的是标准的一对多(one-to-mant)映射关系,在其他项目都能生成赏心悦目的 SQL 语句,唯独今天这个项目中不行。
job.HasOne(j => j.Enterprise)
.WithMany(e => e.Jobs)
.HasForeignKey(j => j.EnterpriseKey);
这个项目与其他项目不同的地方是用了很多 HasQueryFilter ,比如
enterprise.HasQueryFilter(e => e.IsActive);
去掉上面的 HasQueryFilter 问题就解决了,改进后生成的 SQL 语句如下
SELECT TOP(@__p_1) [j.Enterprise].[ShortName] AS [EnterpriseShortName], [j].[Key], [j].[PositionName]
FROM [JobPosition] AS [j]
INNER JOIN [Offer].[Enterprise] AS [j.Enterprise] ON [j].[EnterpriseKey] = [j.Enterprise].[Key]
WHERE ((([j].[Status] = 1) AND ([j.Enterprise].[IsActive] = 1)) AND ([j].[ExpireDate] > GETDATE()))) AND ([j].[CategoryID] = @__categoryId_0)
使用 HasQueryFilter 要小心这个小坑。
EF Core HasQueryFilter 的小坑的更多相关文章
- EF Core懒人小技巧之拒绝DbSet
前言 最近在项目中使用EF Core的频率越来越高,当项目比较大的时候,疯狂往DbContext中加各种DbSet,你会不会特难受?如果你是一键生成的大佬,那么请忽略本文.本文旨在不写 DbSet,那 ...
- EF Core 3.0 Preview 9 的2个小坑
之前我们的数据库服务器使用的是 SQL Server 2008 R2 ,由于从 EF Core 3.0 Preview 6 开始不支持 UseRowNumberForPaging ,只能停留在 EF ...
- EF Core 小坑:DbContextPool 会引起数据库连接池连接耗尽
DbContextPool 是 ASP.NET Core 2.1 引入的新特性,可以节省创建 DbContext 实例的开销,但没有想到其中藏着一个小坑. 最近有一个 ASP.NET Core 项目持 ...
- net core 小坑杂记之配置文件读取(不定期更新)
其实很早就想写了,原想等积累差不多了再写的,但是发现遇到一个当时记下效果会比较好,所以就不定期更新这个系列了,后面获取会整个整理一下. 此篇记载net core入门时踩的一些坑,网上教程太少了,也不规 ...
- EF Core 1.0中使用Include的小技巧
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:由于EF Core暂时不支持Lazy Loading,所以利用Include来加载额外 ...
- 【爬坑笔记】c# 如何通过EF Core读写sql server的类似double型字段
=============================================== 2019/8/31_第1次修改 ccb_warlock == ...
- [小技巧]EF Core中如何获取上下文中操作过的实体
原文地址:https://www.cnblogs.com/lwqlun/p/10576443.html 作者:Lamond Lu 源代码:https://github.com/lamondlu/EFC ...
- 好大一个坑: EF Core 异步读取大字符串字段比同步慢100多倍
这两天遇到一个奇怪的问题,通过 EF/EF Core 查询数据库速度奇慢,先是在传统的 ASP.NET 项目中遇到(用的是EF6.0),后来将该项目迁移至 ASP.NET Core 也是同样的问题(用 ...
- ef core数据迁移的一点小感悟
ef core在针对mysql数据迁移的时候,有些时候没法迁移...有两种情况没法迁移,一种是因为efcore的bug问题导致没法迁移,这个在github上有个问题集,另外一种是对数据表进行较大幅度的 ...
随机推荐
- UE4 PostProcessVolume笔记
透镜:Lens Bloom 光溢出 VDirt Mask 光溢出泥土蒙版 Depth of Filed 景深 V Eye Adaptation (Auto-Exposure) 人眼适应 V这个效果有时 ...
- Shell 自动化部署免密登录
1 .配置主机名称 参考:Linux 修改主机名 和 ip 映射关系 2 . 编写脚本 root.sh 内容 #!/bin/bash SERVERS="hadoop0 hadoop1 had ...
- JAVA进阶10
间歇性混吃等死,持续性踌躇满志系列-------------第10天 1.Random package cn.intcast.day08.demo01; import java.util.Random ...
- XSS闯关游戏准备阶段及XSS构造方法
请下载好XSS闯关文件后,解压后放在服务器的对应文件夹即可 在该闯关中,会在网页提示一个payload数值 payload,翻译过来是有效载荷 通常在传输数据时,为了使数据传输更可靠,要把原始数据分批 ...
- token的设置与获取
以用户登录为例: application-resources.yml: #用户session在redis中保存的key REDIS_STU_SESSION_KEY: REDIS_USER_SESSIO ...
- java -jar参数携带问题
方式一 -DpropName=propValue的形式携带,要放在-jar参数前面,亲测,放在它后面好像取不到值 java -fileName=JOURNAL_TREENODE_DATA-201904 ...
- 如何让vue项目兼容IE浏览器
一般来说项目开发到后期都需要做各种兼容性处理例如:360.IE9以上.QQ浏览器....等等 那么现在来介绍一个工具 babel-cli 跟 babel-preset-es2015 babel-cli ...
- Composer更新慢的解决方案
有两种方式启用镜像服务: 系统全局配置: 即将配置信息添加到 Composer 的全局配置文件 config.json 中. 单个项目配置: 将配置信息添加到某个项目的 composer.json 文 ...
- python内置模块之-logging
logging 模块主要用于写日志 logging模块主要有如下几个组件 Logger Logger对象提供应用程序可直接使用的接口 Handler Handler发送日志到适当的目的地 Filte ...
- CAS tomcat6搭建
#genkey:在tomcat根目录下keytool -genkey -alias tomcat_cas -keyalg RSA -storepass changeit -keystore serve ...