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 中得到解决,但没有任何承诺,因为在不引入重大更改的情况下似乎需要做一些修复工作。
下面的代码使用 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 中得到解决,但没有任何承诺,因为在不引入重大更改的情况下似乎需要做一些修复工作。