我在我的一个类中定义了一个 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
我已经阅读了多篇相关的帖子和文章,说这通常发生在您 定义一个 Non-nullable 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
。众所周知会导致此异常。所以我的结论是:
- 声明不可为 null 的
DateTime
属性的模型将在 SQL Server 中生成datetime
数据类型。 - 声明可为 null 的
DateTime
属性的类的实例将能够作为 null 保存到数据库中 - 手动设置一个有效的默认日期非常重要(如果 <> NULL),否则它将设置为 1/1/0001 并抛出异常
最佳答案
据我所知,它实际上是 SQL Server datetime2
类型直接映射到 .NET 的 DateTime
类型,因此您可能需要更改类型你在 SQL Server 中的专栏
关于c# - Entity Framework 6 中的 Nullable DateTime 属性在值为 null 时在保存时抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25623542/