将日期时间 2 数据类型转换为小日期时间 EF6 MVC5



我首先将MVC5与EF6代码一起使用。我有一个表格,在两个表格(Kommunication和Itemannounce(中都有一个日期(基准(列,具有小日期时间类型,当我尝试使用System.DateTime设置日期时。

将日期时间 2 数据类型转换为小日期时间数据类型 导致值超出范围。该语句已终止。

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

  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,但没有任何运气。我真的被困了好几天,找不到出路。有没有人有我没有尝试过的解决方案?

smalldatetime 的最小值是 1900-01-01

日期时间 2 的最小值为 0000-01-01

据推测,这里发生的事情是我们将 datetime2 值传递到一个小日期时间列中。 如果未提供 datetime2 并且它是非空的,那么它将默认为最小值 0000-01-01 。 这远低于小日期的地板。 这是越界的。 插入小于日期时间范围之外的值将产生您收到的错误消息。

将日期时间 2 数据类型转换为小日期时间数据类型 导致值超出范围。该语句已终止。

有很多方法可以解决这个问题。 我建议更新模型以使用 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 检查也可以工作。 这个类似的问题应该给你一些想法。

最新更新