向“datetime2”列添加值导致溢出。 EF Core 日期比较

Posted

技术标签:

【中文标题】向“datetime2”列添加值导致溢出。 EF Core 日期比较【英文标题】:Adding a value to a 'datetime2' column caused an overflow. EF Core Date Comparison 【发布时间】:2022-01-20 09:48:19 【问题描述】:

您好,有一个名为 TableOne 的实体,它的属性如下:

[Column(TypeName = "datetime2(7)")]
public DateTime ActualDeliveryDateTime  get; set; 

在选择查询中,我根据当前日期时间值检查此属性,如下所示:

 var authorisation = _db.TableOne.OrderByDescending(ar => ar.Id).FirstOrDefault(a =>
  .......
    (
       DateTime.UtcNow >= a.ActualDeliveryDateTime.AddHours(-2) &&
       DateTime.UtcNow <= a.ActualDeliveryDateTime.AddHours(4)
    ) 
.......

但是,我收到了这个错误:Adding a value to a 'datetime2' column caused an overflow。请帮忙。

【问题讨论】:

datetime2 列中有哪些值? 此外,如果您创建所需的最早和最晚时间并将它们直接与数据库中的值进行比较,而不是对表中的每一行进行加减运算,会更安全。 @DavidG 2021-12-17 13:57:00.8040709 【参考方案1】:

我通过反转逻辑解决了这个问题。

(
    DateTime.UtcNow.AddHours(-4) <= a.ActualDeliveryDateTime &&
    DateTime.UtcNow.AddHours(2) >= a.ActualDeliveryDateTime
)

在这种情况下不需要AddHours到SQL Column,而是添加到Current日期。

【讨论】:

以上是关于向“datetime2”列添加值导致溢出。 EF Core 日期比较的主要内容,如果未能解决你的问题,请参考以下文章

哪一列导致“将 datetime2 数据类型转换为 datetime 数据类型导致值超出范围”?

EF6中一个关于时间类型 datetime2 的坑

将 datetime2 数据类型转换为 datetime 数据类型导致值超出范围 - 未使用 DateTime2

向列 'datetime' 添加值时导致溢出

将 datetime2 数据类型转换为 datetime 数据类型会导致值超出范围

将 datetime2 数据类型转换为 datetime 数据类型导致值超出范围