zoukankan      html  css  js  c++  java
  • 在VS10+Server08中使用EF4.4,发布数据库为SQL05,发生错误的问题

    问题描述
    境描述:工具为VS2010+SQL08 R2,EntityFramework版本为4.4(在Framework4.5中为5.0),在本机完全测试完成后,发布到服务器上(Server 2008 R2+Sql 2005)时,会出现错误。
    解决方案
    Windows资源管理器中找到实体模型文件(后缀为edmx),用记事本打开后,可看到如下内容:
    在图片中框选部分,默认是2008,修改为2005.则不会将达datetime类型转换为数据库的datetime2类型,所以解决问题。
    原因分析
    过查找资料得知:

    ProviderManifestToken 是 Entity Data Model (EDM) 内存储架构定义语言 (SSDL) 中的 Schema 元素的必需属性。此标记用于为脱机方案加载提供程序清单。

    打开存储连接时,提供程序可以获取所有需要的信息以选择要返回的正确清单。这在脱机方案中可能做不到,此时,连接信息不可用或无法连接到存储。对于这些情况,Entity Framework 在 SSDL 中存储了一个提供程序清单标记,足够提供程序用来标识清单。

    该标记没有特定的架构;要由提供程序来选择在不打开到存储的连接的情况下标识清单所需的最少信息。

    下面的“提供程序清单标记”示例显示了 ProviderManifestToken 属性中捕获的 SQL Server 版本信息。

        <Schema Namespace="Test.Simple.Target" Alias="Self" 
            Provider="System.Data.SqlClient"
            ProviderManifestToken="2005"
            xmlns:edm="http://schemas.microsoft.com/ado/2006/04/edm/ssdl"
            xmlns="http://schemas.microsoft.com/ado/2006/04/edm/ssdl">
        </Schema>
    注->该段内容摘自:http://msdn.microsoft.com/zh-cn/library/bb896311%28v=VS.90%29.aspx
    
    在资料得知,在EF4.x中,默认会将C#的Datetime类型转换为数据库的datetime2类型,所以导致该错误。修改为05后,会强制EF使用datetime类型,所以在SQL 2005中可以使用。默认转换为datetime2,通过SQL  Server Profiler监视sql语句可看到。
  • 相关阅读:
    商品房买卖合同备案
    收房注意事项!--经典!
    商河水木清华业主告媒体书
    商河水木清华全体业主告开发商书
    商河县水木清华全体业主给县委县府的一封信
    大家不要在水木清华买房子了,我的都一年了,还没交房!
    呼吁所有商河水木清华业主拒绝不合理的交房流程
    说说无耻的商河水木清华开发商2013"交房
    拒绝无效的“交房”写给所有商河水木清华业主
    iframe 里的高度适应的问题
  • 原文地址:https://www.cnblogs.com/humin/p/2916666.html
Copyright © 2011-2022 走看看