【问题标题】:conversion of a datetime2 data type to a smalldatetime EF6 MVC5将 datetime2 数据类型转换为 smalldatetime EF6 MVC5
【发布时间】:2017-10-12 09:10:48
【问题描述】:

我首先使用带有 EF6 代码的 MVC5。我在两个表(通信和 Itemannounce)中都有一个带有 Date(Datum) 列的表,其类型为 smalldatetime,当我尝试在列中使用 System.DateTime.Now 设置日期时,出现以下错误:

将 datetime2 数据类型转换为 smalldatetime 数据类型 导致值超出范围。语句已终止。

我知道字节大小,并在我的上下文中尝试了以下解决方案:

  protected override void OnModelCreating( DbModelBuilder modelBuilder )
        {
        var annons = modelBuilder.Entity<Itemannounce> ( );
        annons.Property ( f => f.Datum ).HasColumnType ( "smalldatetime" );
        var komm = modelBuilder.Entity<Kommunication> ( );
        komm.Property ( f => f.Date ).HasColumnType ( "smalldatetime" );
        base.OnModelCreating ( modelBuilder );
        }

我仍然遇到同样的错误。我试图将列设置为 NOT NULL,但没有任何运气。我真的被困了好几天,没有找到解决办法。有没有人有我没有尝试过的解决方案?

【问题讨论】:

    标签: sql entity-framework-6 type-conversion asp.net-mvc-5


    【解决方案1】:

    smalldatetime 的最小值是1900-01-01

    datetime2 的最小值是0000-01-01

    大概,这里发生的事情是我们将 datetime2 值传递到 smalldatetime 列。当没有提供 datetime2 并且它是 NON NULL 时,它将默认为它的最小值 0000-01-01。这远低于 smalldatetime。它超出了界限。插入 smalldatetime 范围之外的值会产生您收到的错误消息。

    将 datetime2 数据类型转换为 smalldatetime 数据类型 导致值超出范围。语句已终止。

    有很多方法可以解决这个问题。我建议更新模型以使用 datetime2。

     protected override void OnModelCreating( DbModelBuilder modelBuilder )
            {
            var annons = modelBuilder.Entity<Itemannounce> ( );
            annons.Property ( f => f.Datum ).HasColumnType ( "datetime2" );
            var komm = modelBuilder.Entity<Kommunication> ( );
            komm.Property ( f => f.Date ).HasColumnType ( "datetime2" );
            base.OnModelCreating ( modelBuilder );
            }
    

    如果您不想更改模型,那么 NULL 检查也可以工作。 This similar question 应该给你一些想法。

    【讨论】:

    • 我在以前的帖子中尝试了所有其他选项,但没有运气:(
    猜你喜欢
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多