可为空字段无法接受空值?

3

使用EF 6。我有一个实体 (Person) 包含一个可空的日期时间字段。

public DateTime? StartDate { get; set; }

这让我想到,我应该能够将null赋值给该属性而不会出现任何问题,就像这样...
Person.StartDate = null;

然而,当我执行context.SaveChanges()时,出现错误提示...

将datetime2数据类型转换为datetime数据类型时,导致值超出范围。\r\n语句已终止。

一个可空字段不应该能够接受...null吗?


1
该字段接受null,否则在分配时就会出错。这可能是由于您的数据库或EF本身出现了问题。 - Enigmativity
好的观点!当调用SaveChanges()时,会抛出错误。 - webworm
数据库字段显然不可为空。 - Gert Arnold
1个回答

3

同时使您的数据库列可为空。


我正在使用EF Code Migrations,所以C#代码正在生成数据库。既然我定义了它为DateTime?,那么数据库列不应该已经是可空的吗?我需要为实体添加数据注释吗?我还查看了生成的模式,发现该字段在数据库中被列为可以接受null。 - webworm
仍然值得对实际数据库表DDL进行双重检查。 - code4life
datetime2列类型可以支持1753年之前的日期,而datetime则不行。为什么会出现null tripping呢?我也不确定。为什么是1753年呢?请参考https://dev59.com/bXA75IYBdhLWcg3waIQJ。 - robrich
@code4life - 我同意,值得检查。然而,数据库显示该字段为 StartDate (datetime, null) - webworm
通常情况下,我在不使用null而是使用DateTime.Minnew Date(1,1,1)时会遇到此错误。您确定正在保存null,而不是意外地将其初始化为其他值吗? - robrich
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接