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

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

我有一个 ASP.NET Core 项目,它在 EF Core 中使用代码优先。
从 .NET 7 升级到 .NET 8 以及 EF Core 包后,我遇到了错误

SqlException:“$”附近的语法不正确。

这是来自探查器的查询

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]'

这是我的

OnConfiguring
方法:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    base.OnConfiguring(optionsBuilder);
    optionsBuilder.UseSqlServer(_configuration.GetConnectionString("DefaultConnection")
, o => o.UseCompatibilityLevel(160));
}

我尝试使用.NET 8添加另一个迁移并更新数据库,但不幸的是它不起作用。

我在 Stackoverflow 社区搜索了很多,但没有一个线程与我的问题相关。

环境:

  • .NET 8
  • SQL Server 2022 版本 16.0.1000.6
  • Windows 11
c# asp.net sql-server entity-framework-core ef-code-first
2个回答
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));

0
投票

正如 Martin Smith 评论的那样,我已经在

master
数据库

上执行了此查询
SELECT name, compatibility_level FROM sys.databases

看到我的数据库兼容性是120而不是160

看来我应该先更新我的数据库兼容性
微软文档

© www.soinside.com 2019 - 2024. All rights reserved.