实体框架错误:将datetime2数据类型转换为日期时间数据

时间:2011-03-20 00:07:39

标签: sql-server entity-framework

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

以下是该方案:

我的MS SQL Server数据库用户表中的 CreateDate DateTime 列是不可为空的,并使用“默认值或绑定”设置中的GetDate()方法。

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

  

datetime2数据的转换   输入到日期时间数据类型   在超出范围的价值。

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

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

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

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

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

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

好消息是,它是固定的。寻找KB2561001:http://archive.msdn.microsoft.com/KB2561001。我不知道在随后的EF 4.3版本中是否修复了此问题,或者您仍然需要应用此修补程序。