EF:更改ProviderManifestToken还是更改数据类型?

时间:2011-10-04 14:50:52

标签: .net sql-server-2008 datetime entity-framework-4 datetime2

两个问题,其次是细节:

  1. 将ProviderManifestToken更改为“2005”时会发生哪些其他副作用?
  2. 将数据库中的架构更改从datetime更改为datetime2是不明智的吗?例如,如果我将ProviderManifestToken保留为“2008”并且某人稍后尝试从EDMX模型生成数据库模式,那么它在创建这些列时是否会使用datetime2数据类型?
  3. 详细说明:

    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的其他地方会发生什么变化,而且当我不是绝对必要的时候,我偏向于反向使用技术

1 个答案:

答案 0 :(得分:1)

通过将ProviderManifestToken更改为2005,有些事情确实不再起作用。具体来说,LINQ查询使用与SQL 2008时间类型相关的函数。我个人没有遇到过将令牌更改为2005的问题(即使在多个环境中基于每个环境)......但这不是一件容易接受的事情。您需要彻底测试应用程序中的所有查询。

关于edmx反向生成的模式 - 由与edmx关联的SQL生成模板决定,而不是ProviderManifestToken本身。