EF6 datetime2转换为datetime导致超出范围的值

时间:2016-08-23 17:41:32

标签: c# entity-framework datetime datetime2

我刚刚部署了一周前用于工作的服务器代码。导致错误的代码部分没有改变,但是对象本身也没有改变。

这是Model First方法(从Database First转换而来),我已经为模型添加了两个关联字段和两个新表。

抛出错误的代码部分是关键任务。它基本上通过设置时间戳禁用并发编辑值。但由于某种原因,它不起作用。

特定代码:

user.AlertConcurrency = DateTime.UtcNow;
db.SaveChanges();

错误:

  

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

现在,user.AlertConcurrency字段是数据库中的日期时间类型。我不知道为什么它甚至会尝试在这里进行datetime到datetime2的转换。我错过了什么?

1 个答案:

答案 0 :(得分:0)

datetime2的日期时间范围更大,所以你可能有一个null datetime2,它是" 0001/01/01"试图转换为最小值为" 1753/01/01"因此转换失败。因此,null C#DateTime属性将是导致问题的datetime2值。

检查模型是否已完全更新/与数据库同步,并检查DateTime属性中的空值。如果您有空数据库值或想要保存null DateTime,那么请考虑在模型和数据库中使用可为空的DateTime。