Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net EF:更改ProviderManifestToken还是更改数据类型?_.net_Sql Server 2008_Datetime_Entity Framework 4_Datetime2 - Fatal编程技术网

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

.net EF:更改ProviderManifestToken还是更改数据类型?,.net,sql-server-2008,datetime,entity-framework-4,datetime2,.net,Sql Server 2008,Datetime,Entity Framework 4,Datetime2,两个问题,然后是细节: 当我将ProviderManifestToken更改为“2005”时,还会发生哪些其他副作用 将数据库中的模式从datetime更改为datetime2是否不明智?例如,如果我将ProviderManifestToken保留为“2008”,而稍后有人试图从EDMX模型生成数据库架构,那么在创建这些列时,它会为这些列使用datetime2数据类型吗 详情: VS2010 SP1 .NET 4 EF 4 SQL Server 2008 我没有实践实体框架的经验,我突然维护了一

两个问题,然后是细节:

  • 当我将ProviderManifestToken更改为“2005”时,还会发生哪些其他副作用
  • 将数据库中的模式从
    datetime
    更改为
    datetime2
    是否不明智?例如,如果我将ProviderManifestToken保留为“2008”,而稍后有人试图从EDMX模型生成数据库架构,那么在创建这些列时,它会为这些列使用
    datetime2
    数据类型吗
  • 详情:

    VS2010 SP1
    .NET 4
    EF 4
    SQL Server 2008

    我没有实践实体框架的经验,我突然维护了一个使用它的代码库。代码库很脆弱,日程安排很紧,留下来的人还没有很好地理解它

    解决方案资源管理器显示一个EDMX文件,该文件映射到我们的开发人员数据库中的现有模式。我不知道哪个(模型或数据库)是第一位的

    提交操作失败,出现以下错误:

    将datetime2数据类型转换为datetime数据类型 导致值超出范围

    当我查看SQL Server 2008实例中日期/时间列的数据类型时,它们都是
    datetime
    ,而不是
    datetime2

    当我查看EDMX文件的XML时,我看到以下模式元素属性:

    ProviderManifestToken=“2008”

    我猜,在我的.NET代码的某个地方,有一个DateTime值,它的值超出了SQLServer2008的
    DateTime
    数据类型的范围。我从阅读中了解到,将EDMX的ProviderManifestToken更改为“2005”将阻止EF在这些提交期间尝试使用
    datetime2
    类型


    这是我的问题:如果我从2008年改到2005年,我不知道这个代码库或EF在代码库中的位置还会有什么变化,我有一个偏见,就是当技术不是绝对需要的时候,我不喜欢向后移动。

    如果将ProviderManifestToken改到2005年,有些东西确实将不再起作用。具体来说,LINQ查询使用与SQL 2008时间类型相关的函数。我个人并没有因为将令牌更改为2005而遇到任何问题(即使在多个环境中基于每个环境)…但这不是一件可以掉以轻心的事情。您需要彻底测试应用程序中的所有查询


    至于edmx以相反的方向生成的模式,这是由与您的edmx关联的SQL生成模板决定的,而不是ProviderManifestToken本身。

    如果将ProviderManifestToken更改为2005,有些东西确实将不再起作用。具体来说,LINQ查询使用与SQL 2008时间类型相关的函数。我个人并没有因为将令牌更改为2005而遇到任何问题(即使在多个环境中基于每个环境)…但这不是一件可以掉以轻心的事情。您需要彻底测试应用程序中的所有查询

    至于edmx以相反方向生成的模式,这是由与edmx关联的SQL生成模板决定的,而不是由ProviderManifestToken本身决定的