升级到 .net 8 后使用 ef core 查询遇到错误:Microsoft.Data.SqlClient.SqlException (0x80131904): Incorrect syntax near '$'. 附近的语法不正确

发布时间 2024-01-03 18:45:13作者: 不是豆豆

是因为 .net 8 优化了 Contains 子句的 SQL 翻译,之前的 IN 查询有性能问题

但这个优化只有 SQL Server 2016 及以上版本的数据库支持,否则就会报这个错

而且即便数据库引擎版本达到,数据库本身的兼容性设置如果低于 SQL Server 2016 的话,也会报错

解决方案1:

安装 SQL Server 2016 或更高版本的数据库,或者修改数据库本身的兼容性设置到 SQL Server 2016 或更高

解决方案2:

在代码中增加兼容性配置项:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    => optionsBuilder
        .UseSqlServer(@"<CONNECTION STRING>", o => o.UseCompatibilityLevel(120));

参考:https://learn.microsoft.com/zh-cn/ef/core/what-is-new/ef-core-8.0/breaking-changes#contains-in-linq-queries-may-stop-working-on-older-sql-server-versions