Entity Framework 转换为兼容性 130 时无法正确处理 DateTime 列

Entity Framework not working correctly with DateTime column when converted to compatibilty 130

下面的代码使用 SQL 服务器兼容级别 100。但是更新到 130,开始使下面的代码失败。我相信这与日期时间和精度有关。该项目不再被删除。任何线索为什么以及是否有解决方法。我们想在130关卡使用一些新功能

_gameJobsRepository.Delete(q => q.GameId == gameJob.GameId && q.DateCreated <= gameJob.DateCreated);

这是一个 known issue with EF6 and SQL Server 2016+ in compat level 130+. SQL Server introduced a breaking change,它破坏了 EF6。

解决方法是

  • 保持兼容级别 120
  • 将所有 datetime 列更改为 datetime2
  • 保留所有 datetime 列并使用命令拦截器更改参数类型(请参阅 github 问题)
  • 迁移到 EF 核心

此外,这个 可能 在 EF 6.3 中得到解决,但没有任何承诺,因为在不引入重大更改的情况下似乎需要做一些修复工作。