B_C*_*Cbk 5 sql-server entity-framework-core asp.net-core .net-8.0 ef-core-8.0
我决定将我的项目从 切换.NET6到.NE 8. 我的项目数据库是SQL Server 2016。
起初一切都很顺利,但我遇到了一个错误:
var seferIds = tList.expedition.Select(r => r.Key).ToArray();
var sql = (from h in context.Line
           join v in context.Route on h.id equals v.lineId
           join s in context.Expedition on v.id equals s.routeId
           where seferIds.Contains(s.id)
           select new { h, v, s })
          .ToDictionary(r => r.s.id);
这样,我就无法Contains()在使用数据库表 ( ) 创建的 Linq 查询中使用AsQueryable。
我做了一些研究,如果我将其定义为
where seferIds.AsQueryable().Contains(s.id)
错误消失。同时,我需要seferIds.Any()在我的代码中以 的形式进行空检查。
我查看了使用 SQL Server 2019 作为数据库是否会遇到相同的错误,并且可以where seferIds.Contains(s.id)正常工作,没有任何问题,也没有错误。
至于我的问题,这个问题是.net8不再兼容旧数据库版本的问题吗?还有其他我错过的情况吗?
我想知道这个错误是否有不同的解决方案。
在将项目更新到较新版本之前,请务必阅读“重大更改”,您的问题也在此列表中:
新的EF Core 8.0转换使用 SQL ServerOPENJSON函数将值作为 JSON 数组传输。这解决了先前技术固有的性能问题;但是,该OPENJSON功能在 SQL Server 2014 及以下版本中不可用。
该OPENJSON函数是在 SQL Server 2016 (13.x) 中引入的;为此,只需UseCompatibilityLevel在配置上下文选项时调用新方法即可。 120 参数是所需的 SQL Server 兼容性级别;120 对应于 SQL Server 2014 (12.x)。完成此操作后,EF 将生成先前的翻译。
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    => optionsBuilder
        .UseSqlServer(@"<CONNECTION STRING>", o => o.UseCompatibilityLevel(120));
| 归档时间: | 
 | 
| 查看次数: | 536 次 | 
| 最近记录: |