【问题标题】:Entity framework error: The conversion of a datetime2 data type to a datetime data实体框架错误:将 datetime2 数据类型转换为 datetime 数据
【发布时间】:2011-03-20 00:07:38
【问题描述】:

我知道有很多关于这个问题的帖子,但似乎都没有解决我的问题。

这是场景:

我的 MS SQL Server 数据库 User 表中有一个 CreateDate DateTime 列,该列不可为空并且使用 自动设置>GetDate() 方法在“默认值或绑定”设置中。

我可以使用标准的 EF 插入创建一个用户,但是当我尝试更新用户时,我收到了这个错误:

datetime2 数据的转换 类型为日期时间数据类型导致 在一个超出范围的值。

不让 EF 担心 CreateDate 列的更新有什么诀窍?我有 StoreGenerationPattern = Identity 但这没有帮助。

以下是我的实体属性的 EF 属性: http://screencast.com/t/8ndQRn9N

这是我的更新方法: http://screencast.com/t/UXIzhkhR

【问题讨论】:

  • 你有VS 2010 SP1吗?

标签: sql-server entity-framework


【解决方案1】:

您是否尝试将 StoreGeneratedPattern 属性设置为“已计算”。如果做不到这一点,作为最后的手段,尝试将列的数据类型更改为datetime2

[出现问题是因为 .NET DateTime.MinValue 等于 0001-1-1 但 Sql Server DateTime 涵盖 1753-1-1 到 9999-12-31]

【讨论】:

  • 我意识到 datetime2 涵盖的时间跨度更大,但如果我只是设置创建日期(即当前日期),为什么需要更多时间?问题是它不断尝试将 createdate 更新为 0001-1-1 而不是根本不更新它,因为它是一个 createdate 并且在创建记录时在数据库中创建并且永远不应该更新。它应该不管它,而不是像实体键一样担心它。
【解决方案2】:

我知道这是一个老问题,但也许这可能对某人有所帮助:

问题可能是导致 .edmx 文件的概念部分 (CSDL) 中的 StoreGeneratedPattern 与存储部分 (SSDL) 中的 StoreGeneratedPattern 不同步的错误。永远不会调用 GetDate() 默认值,因为 - 除非您从客户端代码分配日期 - 使用默认值 DateTime.MinValue

好消息是,它已修复。查找 KB2561001:http://archive.msdn.microsoft.com/KB2561001。我不知道这是否在随后的 EF 4.3 版本中得到修复,或者您仍然需要应用修补程序。

【讨论】:

  • 此链接现在不可用。我需要这个。
猜你喜欢
  • 1970-01-01
  • 2013-04-24
  • 2011-11-15
  • 1970-01-01
  • 2011-04-07
相关资源
最近更新 更多