使用SQL日期数据类型和EF4

33

我有一张表,其中包含一个 SQL 日期数据类型。当我查看 EDM 标记时,存储元素反映了这一点。概念实体具有 DateTime 数据类型(似乎没有 Date 数据类型)。当我调用 save changes 并且有一个 DateTime 实例与要持久化的实体相关联时,我收到以下错误:

将 datetime2 数据类型转换为 datetime 数据类型时,结果超出范围。语句已终止。

如何在我的架构中使用日期数据类型并使 EF 表现正常?谢谢!

1个回答

49

看起来你的 SQL 日期列是非空的,但在保存实体之前你没有初始化日期?


1
是的,我刚意识到这与我的日期列无关,我有另一个DateTime列在数据库中指定了默认值,但我忘记更改SSDL中的StoreGeneratedPattern属性以使其正常工作。我的错。 - James Alexander
1
@Pop Catalin:很难责怪EF;它的行为是正确的。SQL Server只有一个非常奇怪且受限的DateTime范围。 - Craig Stuntz
我的意思是,总的来说,这只是我在很短的时间内遇到的许多问题之一... (顺便说一句,EF是在SQL Server之后出现的,我本来期望它能做得更好) - Pop Catalin
1
今晚我也遇到了同样的问题,不过神奇的是我在谷歌搜索中找到了这个页面,并且感谢这个答案,我意识到只需要将我的领域(POCO)模型(通过EF Code-First)设置为Nullable<DateTime>而不是DateTime,现在一切都正常了!耶! - Funka
SQL Server的DATETIME类型的有效范围是1753年1月1日至9999年12月31日。如果EF检测到值超出此范围,它会自动尝试使用DATETIME2而不是DATETIME来存储该值。为避免这种不必要的行为,您必须在应用程序中添加代码以确保该值在有效的DATETIME范围内。另请参阅https://dev59.com/LnA65IYBdhLWcg3w4CwL。 - Suncat2000

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