实体框架迁移 - 将datetime2数据类型转换为日期时间数据类型会导致超出范围的值

时间:2015-11-19 09:19:55

标签: c# entity-framework

我有一个迁移,要将DateTime字段添加到现有实体User

    public override void Up()
    {
        AddColumn("User", "UpdatedDate", c => c.DateTime(nullable: false, defaultValue: DateTime.Now));
    }

    public override void Down()
    {
        DropColumn("User", "UpdatedDate");
    }

运行Update-Database命令以运行迁移时,会发生以下错误:

System.Data.SqlClient.SqlException: The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value.

有趣的是,迁移运行正常,使用当前日期时间的默认值插入列,但抛出此异常。

2 个答案:

答案 0 :(得分:0)

日期时间2上的MSDN:

  

定义与基于24小时制的时间相结合的日期。 datetime2可以视为现有日期时间类型的扩展,具有更大的日期范围,更大的默认小数精度和可选的用户指定精度。

我猜测datetime2比datetime更大,因为它更精确,这就是为什么你得到一个超出范围的例外。

答案 1 :(得分:0)

在以前的版本中,Entity过去经常抱怨这样的错误,但原因并不是转换。

模型通常属性为null,但数据库不允许空值。

请确认不是您的情况。正如你在某处有一些UserDate = null的用户。