c# - Entity Framework 6 中的 Nullable DateTime 属性在值为 null 时在保存时抛出异常

标签 c# .net datetime entity-framework-6

我在我的一个类中定义了一个 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 应该是一个有效值,并且应该一直流向数据库,中间没有任何其他转换。

这里有一篇相关文章: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/

相关文章:

C#:映射 IDataReader.GetTableSchema() 和 DbType 枚举?

c# - 匿名类的通用列表

python - Matplotlib 子图日期时间 X 轴刻度未按预期工作

python - 为什么1小时错了?

c# - 是否有必要模拟单元测试中的所有依赖项?

c# - 将 List<String> 中的所有字符串转换为单个逗号分隔字符串的最佳方法

c# - 我可以在方法范围内用 C# 或 VB.NET 创建别名吗?

c# - 无法使用静态方法、实例方法等作为 .NET 中属性的参数的原因是什么?

java - 根据语言环境确定日期时间模式

C#如何及时停止线程?