如何解决EF 4.1,CodeFirst C#DateTime datetime2与datetime不兼容问题

时间:2012-02-10 15:33:39

标签: .net entity-framework-4.1 code-first datetime2

我的Code First模型具有System.DateTime属性。调用数据库种子代码时,它会抛出此异常:

  

SqlException(0x80131904):将datetime2数据类型转换为日期时间数据类型会导致超出范围的值。

我正在使用构造函数创建一个新的DateTime对象。 Code First正在创建数据库模式。如何克服Code First中的这个明显错误?我并不特别关注我的数据类型。我只需要存储一个日期,也可以选择存储一天中的时间,但这并不重要。

我搜索并阅读了很多帖子,但是没有这个错误指出它们来自CodeFirst生成的数据方案。我发现最接近的答案涉及对ProviderManifestToken文件中的edmx进行更改,但我的项目没有edmx文件。我没有使用设计器,我正在使用Code First。

2 个答案:

答案 0 :(得分:3)

将.NET中的DateTime映射到SQL Server中的datetime。类型具有不同的范围:datetime只能存储晚于1750年左右的日期。如果您尝试在实体中存储具有较早日期或已整合DateTime的{​​{1}}(哪一年有1)你得到异常,因为SQL Server无法存储它。

解决方案:

实际上我也曾期望默认映射到datetime2,因为它更适合.NET中的datetime2。但出于某种原因,他们决定使用DateTime作为默认值。

答案 1 :(得分:0)

很抱歉,经过更仔细的调试,我发现错误来自数据实体初始化,而我没有为DateTime指定任何值。

我原以为它来自一个涉及新DateTime(2012, 2, 19, 19, 0, 0)或其他类似内容的长数据种子声明。感谢Slauma的努力 - 他说这是正确的,因为它是由于单一化的价值观。