我在其中一个类中定义了一个Nullable DateTime
属性:
public DateTime? ControlDate { get; set; }
当使用EF 6 CodeFirst从我的模型生成数据库(SQL Server 2008)时,我得到:
问题是当我用ControlDate=null
保存我的实例时,我得到了这个例外:
conversion of a datetime2 data type to a datetime data type
resulted in an out-of-range value
我已阅读多篇相关帖子和文章,说这通常发生在你身上 定义一个不可为空的DateTime属性并尝试保存它,而不设置之前的有效日期, 有些人建议将属性设置为可为空,以防属性值为null(这是我的特例)。
我的问题是:为什么当我的属性和列类型可以为空时,EF会尝试设置默认日期。 Null应该是一个有效值,并且应该一直流到数据库,而不需要在它们之间进行任何其他转换。
这是一篇相关文章:Conversion of a datetime2 data type to a datetime data type results out-of-range value
编辑:: Here is a very similar question。非常详细的解释,如果有人有兴趣。
经验教训:只是想澄清一下,仔细观察后,我发现这是我身上的一个问题。在保存我的对象之前,它被设置为:
myObject.ControlDate = new DateTime()
在检查时,它显示默认的不兼容日期1/1/0001
。众所周知,这会导致此异常。所以我的结论是:
DateTime
属性的模型将在SQL Server中生成datetime
数据类型。 DateTime
属性的类的实例将能够保存到数据库为null 答案 0 :(得分:4)
据我所知,实际上SQL Server datetime2
类型直接映射到.NET的DateTime
类型,因此您可能需要在SQL Server中更改列的类型