EFcore8和Sql Server 2014冲突
项目升级到EFCore8之后,所有的Contains方法都报错
报错的linq语句示例:
_db.SysModules.Where(x => moduleIds.Contains(x.Id)).AsNoTracking().ToListAsync()
用log4net记录的报错内容如下
ERROR 关键字 'WITH' 附近有语法错误。 关键字 'with' 附近有语法错误。如果此语句是公用表表达式、xmlnamespaces 子句或者更改跟踪上下文子句,那么前一个语句必须以分号结尾。
这是因为EFCore版本太高,SqlServer版本太低。
解决方法:
1、升级SqlServer
2、在DbContext配置项加上以下代码
optionsBuilder.LogTo(Console.WriteLine, LogLevel.Information).UseSqlServer(sqlStr, o => o.UseCompatibilityLevel(120));
其中最关键的是o => o.UseCompatibilityLevel(120)
可以让EFCore和低版本SqlServer兼容