SqlException:“$”附近的语法不正确。将 EFCore 7 升级到 8 后

问题描述 投票:0回答:1

我有一个使用

Code First
EF Core 的 ASP 项目。
将 Dotnet7 升级到 Dotnet8 以及 EFCore 软件包后,我遇到了错误

SqlException: Incorrect syntax near '$'.

这是来自探查器的查询

exec sp_executesql N'SELECT [t].[id], [t].[idDatetime], [t].[IdDistPath], [t].[idLoadType], [t].[idLoader], [t].[idLoaderDriver], [t].[idShift], [t].[idTruck], [t].[idTruckDriver], [t].[level], [t].[pattern], [t].[Tonnage]
FROM [tbl_Loading] AS [t]
WHERE [t].[idShift] IN (
    SELECT [s].[value]
    FROM OPENJSON(@__shiftsAllIds_0) WITH ([value] int ''$'') AS [s]
)',N'@__shiftsAllIds_0 nvarchar(4000)',@__shiftsAllIds_0=N'[338769,338768]'

我尝试使用 Dotnet8 添加另一个迁移并更新了数据库,但不幸的是它没有成功。 我在 Stackoverflow 社区搜索了很多,但没有一个线程与我的问题相关。

点网8 SQL Server 2022 版本 16.0.1000.6 Windows 11

c# asp.net sql-server entity-framework-core ef-code-first
1个回答
0
投票

生成的 SQL 已更改 如此处所述

OPENJSON
需要 SQL Server 2016+/兼容级别 130+。

请参阅上述文章中的缓解选项

如果兼容性级别低于 130 (SQL Server 2016),请考虑 将其修改为更新的值(文档)。

否则,如果您的数据库版本确实比 SQL Server 旧 2016,或设置为无法更改的旧兼容性级别 由于某种原因,将 EF Core 配置为恢复到较旧的、较少的版本 高效的SQL如下:

c#

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    => optionsBuilder
        .UseSqlServer(@"<CONNECTION STRING>", o => o.UseCompatibilityLevel(120));
© www.soinside.com 2019 - 2024. All rights reserved.