You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EF Core 8预览版使用字符串列表查询表(IN子句)报错解决

问题解决:EF Core 8预览版Contains查询触发“$附近语法错误”

问题场景

从EF 6项目升级至EF Core 8预览版(8.0.0-rc.1.23419.6)后,通过WebAPI传入字符串列表,使用LINQ的Contains方法执行IN子句查询时,抛出Microsoft.Data.SqlClient.SqlException,错误提示为“$附近语法错误”。尝试在Program.cs中通过UseCompatibilityLevel(150)设置上下文兼容性级别,问题未解决。

根因分析

EF Core 8对Contains方法生成的SQL做了优化,采用了更高效的语法,但该语法仅支持SQL Server 2014及以上版本(对应数据库兼容性级别120及以上)。即使使用SQL Server 2019这类高版本数据库,若数据库本身的兼容性级别被设置为100(模拟SQL Server 2008),依然会触发兼容性问题,导致SQL语法解析错误。

注意:代码层面设置UseCompatibilityLevel仅影响EF Core生成SQL的逻辑,无法覆盖数据库本身的兼容性限制。

解决步骤

直接调整目标数据库的兼容性级别,建议设置为对应SQL Server版本的级别:

  1. 打开SSMS或其他数据库管理工具,连接到目标SQL Server实例
  2. 执行以下SQL命令(替换为你的数据库名称):
ALTER DATABASE [你的数据库名称] SET COMPATIBILITY_LEVEL = 150;

兼容性级别对应关系:150=SQL Server 2019,140=SQL Server 2017,130=SQL Server 2016,120=SQL Server 2014

如果必须兼容SQL Server 2014以下版本,可考虑降级EF Core版本至7.x及以下,或改用分批查询等方式替代Contains。

内容的提问来源于stack exchange,提问作者Mike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 15:09:56