首页 > 解决方案 > 转换为兼容性 130 时,实体框架无法与 DateTime 列一起正常工作

问题描述

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

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

标签: sql-serverentity-frameworkdatetimeentity-framework-6datetime2

解决方案


这是兼容级别 130+ 中的 EF6 和 SQL Server 2016+的已知问题。SQL Server 引入了一项重大更改,它破坏了 EF6。

解决方法是

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

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


推荐阅读