使用可空日期列和EF 6.1.3转换datetime2错误

时间:2016-06-02 04:25:42

标签: c# entity-framework datetime

我们正在使用数据库第一种方法(SQL Server)并定义了一个可空日期列。我们在Visual Studio中生成了上下文,确认已添加[Column(TypeName = "Date")]。当我们保存新记录(我们确认该值为null或值为> 01-01-2000 )时,我们得到以下异常。

  

将datetime2数据类型转换为日期时间数据类型会导致超出范围的值“异常。

我们查看了其他SO问题和this文章,但除了将数据库列更改为可为空的datetime2之外,我们找不到此错误的真正原因。这是EF的已知限制吗?

1 个答案:

答案 0 :(得分:0)

当数据库中的datetime字段是可选的且未设置值时,通常会发生这种情况。它是 entity-framework 架构事物之一。

我建议您调试此问题,看看它是否显示此0001/1/1之类的日期,在这种情况下,使用某个值初始化字段或property nullable为{{ 1}}是值类型DateTime

正如您所说的那样(我们确认该值为空或在structDateTime.MinValue之间),那么唯一可以找到的解决方案就是:

DateTime.MaxValue

注意 var value = values[name]; if (value is DateTime) { var date = (DateTime)value; if (date < SqlDateTime.MinValue.Value) { values[name] = SqlDateTime.MinValue.Value; } else if (date > SqlDateTime.MaxValue.Value) { values[name] = SqlDateTime.MaxValue.Value; } }

实体框架中,将SqlDateTime.MinValue != DateTime.MinValue文件中的nullable属性设置为edmx

enter image description here

希望这能以任何方式帮助你:)