4

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

SqlException (0x80131904):将 datetime2 数据类型转换为 datetime 数据类型导致值超出范围。

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

我已经搜索并阅读了很多帖子,但没有一个带有此错误的帖子指定它们来自 CodeFirst 生成的数据方案。我找到的最接近的答案涉及ProviderManifestTokenedmx文件中的进行更改,但我的项目没有edmx文件。我没有使用设计器,我使用的是 Code First。

4

2 回答 2

3

DateTime.NET 中的EF 映射到datetimeSQL Server 中。这些类型有不同的范围:datetime只能存储晚于 1750 年左右的日期。如果您尝试将 a 存储DateTime在具有较早日期或未初始化DateTime(具有第 1 年)的实体中,则会出现异常,因为 SQL Server 无法存储此.

解决方案:

  • 要么确保您要存储的日期晚于 1750
  • 或者将您的DateTime属性明确映射到datetime2范围更广的 SQL Server 中。如何使用 Fluent API 定义此映射的示例:https ://stackoverflow.com/a/8044310/270591

实际上,我还期望有一个默认映射,datetime2因为它更适合DateTime.NET。但由于某种原因,他们决定使用datetime默认值。

于 2012-02-10T16:07:09.287 回答
0

抱歉,经过更仔细的调试后,我发现错误来自数据实体初始化,涉及我没有为DateTime.

我原以为它来自一个涉及新的DateTime(2012, 2, 19, 19, 0, 0)或类似的长数据播种声明。感谢 Slauma 的努力——他是正确的,这是由于统一的价值观。

于 2012-02-11T00:02:08.733 回答