我有一个使用
Code First
EF Core 的 ASP 项目。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
生成的 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));