1

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

这是一种模型优先的方法(从数据库优先转换而来),我在模型中添加了两个关联字段和两个新表。

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

具体代码:

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

错误:

将 datetime2 数据类型转换为 datetime 数据类型导致值超出范围。该语句已终止。

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

4

1 回答 1

1

datetime2 的范围比 datetime 更大,因此您可能有一个 null datetime2,即“0001/01/01”,试图转换为最小值为“1753/01/01”的日期时间,因此转换失败。因此,空 C# DateTime 属性将是导致问题的 datetime2 值。

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

于 2016-08-23T18:23:58.117 回答