我们正在使用数据库第一种方法(SQL Server)并定义了一个可空日期列。我们在Visual Studio中生成了上下文,确认已添加[Column(TypeName = "Date")]
。当我们保存新记录(我们确认该值为null或值为> 01-01-2000 )时,我们得到以下异常。
将datetime2数据类型转换为日期时间数据类型会导致超出范围的值“异常。
我们查看了其他SO问题和this文章,但除了将数据库列更改为可为空的datetime2之外,我们找不到此错误的真正原因。这是EF的已知限制吗?
答案 0 :(得分:0)
当数据库中的datetime
字段是可选的且未设置值时,通常会发生这种情况。它是 entity-framework 架构事物之一。
我建议您调试此问题,看看它是否显示此0001/1/1
之类的日期,在这种情况下,使用某个值初始化字段或property
nullable
为{{ 1}}是值类型DateTime
正如您所说的那样(我们确认该值为空或在struct
和DateTime.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
希望这能以任何方式帮助你:)