两个问题,其次是细节:
datetime
更改为datetime2
是不明智的吗?例如,如果我将ProviderManifestToken保留为“2008”并且某人稍后尝试从EDMX模型生成数据库模式,那么它在创建这些列时是否会使用datetime2
数据类型?详细说明:
VS2010 SP1
.NET 4
EF 4
SQL Server 2008
我没有动手实体框架的经验,我突然维护了一个使用它的代码库。代码库很脆弱,时间紧迫,而且还不为那些留下来的人所理解。
Solution Explorer显示EDMX文件,该文件映射到DEV数据库中的现有模式。我不知道哪个(模型或数据库)是第一个。
提交操作失败,出现此错误:
将datetime2数据类型转换为日期时间数据类型 导致了超出范围的价值。
当我查看SQL Server 2008实例中的日期/时间列的数据类型时,它们全部是datetime
,而不是datetime2
。
当我查看EDMX文件的XML时,我看到了这个Schema元素属性:
ProviderManifestToken = “2008”
我猜测,在某处,我的.NET代码中有一个DateTime值,其值超出了SQL Server 2008的datetime
数据类型的范围。我从阅读中得知,将EDMX的ProviderManifestToken更改为“2005”会阻止EF在这些提交期间尝试使用datetime2
类型。
这是我的问题:如果我从2008年改为2005年,我不知道这个代码库还是EF的其他地方会发生什么变化,而且当我不是绝对必要的时候,我偏向于反向使用技术
答案 0 :(得分:1)
通过将ProviderManifestToken更改为2005,有些事情确实不再起作用。具体来说,LINQ查询使用与SQL 2008时间类型相关的函数。我个人没有遇到过将令牌更改为2005的问题(即使在多个环境中基于每个环境)......但这不是一件容易接受的事情。您需要彻底测试应用程序中的所有查询。
关于edmx反向生成的模式 - 由与edmx关联的SQL生成模板决定,而不是ProviderManifestToken本身。