繁体   English   中英

当值为null时,Entity Framework 6中的Nullable DateTime属性会在保存时引发异常

[英]Nullable DateTime property in Entity Framework 6 thows exception on save when value is null

我在我的一个类中定义了一个Nullable DateTime属性:

public DateTime? ControlDate { get; set; }

当使用EF 6 CodeFirst从我的模型生成数据库(SQL Server 2008)时,我得到:

ControlDate为null

问题是,当我使用ControlDate=null保存我的实例时,我得到以下异常:

conversion of a datetime2 data type to a datetime data type
resulted in an out-of-range value

我已经阅读了多个相关的帖子和​​文章,说这通常发生在你定义一个Non-nullable DateTime属性并尝试保存它而不设置之前的有效日期时,有些人建议将属性设置为可为空,以防属性值为null(这是我的特例)。

我的问题是:为什么当我的属性和列类型可以为空时,EF会尝试设置默认日期。 Null应该是一个有效值,并且应该一直流到数据库,而不需要在它们之间进行任何其他转换。

这里有一篇相关文章: 将datetime2数据类型转换为日期时间数据类型会产生超出范围的值

编辑:: 这是一个非常相似的问题 非常详细的解释,如果有人有兴趣。

经验教训:只是想澄清一下,仔细观察后,我发现这是我身上的一个问题。 在保存我的对象之前,它被设置为:

myObject.ControlDate = new DateTime()

在检查时,它显示默认的不兼容日期1/1/0001 众所周知,这会导致此异常。 所以我的结论:

  • 声明不可为空的DateTime属性的模型将在SQL Server中生成datetime数据类型。
  • 声明可以为null的DateTime属性的类的实例将能够作为null保存到DB
  • 手动设置有效的默认日期非常重要 (如果<> NULL),否则将其设置为1/1/0001并抛出异常

据我所知,它实际上是直接映射到.NET的DateTime类型的SQL Server datetime2类型,因此您可能需要在SQL Server中更改列的类型

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM