datetime2到datetime的转换超出范围

时间:2014-11-13 18:28:09

标签: c# sql-server entity-framework asp.net-mvc-4 datetime

已阅读过有关此问题的大量帖子,但未发现任何可行的内容。

我们的SQL数据库的字段设置如此(数据类型为datetime

enter image description here

相应的模型属性具有以下声明

    [DisplayName("Effective Date")]
    [Column(TypeName = "DateTime")]
    [DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
    public DateTime? EffectiveDate { get; set; }

然而,如果我输入日期11/11/1111我的程序运行时出现以下错误DbContext.SaveChanges()

  

将datetime2数据类型转换为日期时间数据类型   导致超出范围的价值。该声明已被终止

我不知道,也没有发现我们的ASP MVC项目或SQL表中的任何范围规范。任何帮助非常感谢。

2 个答案:

答案 0 :(得分:5)

您已将列类型指定为:

[Column(TypeName = "DateTime")]

这将映射到SQL Server中的Dateime type列, and not Datetime2

DateTime的有效范围为1753年1月1日至9999年12月31日,因此您的值11/11/1111超出了范围。

错误消息包含datetime2,这是由于提供的值11/11/1111,它将落在datetime2范围内。

答案 1 :(得分:2)

MSSQL的DateTime数据类型范围为January 1, 1753, through December 31, 9999

http://msdn.microsoft.com/en-us/library/ms187819.aspx

说明使用datetime2的错误消息有点误导,但最终问题是您尝试使用超出DateTime数据类型范围的日期。