【问题标题】:Issues connecting to Informix via Entity Framework from Windows从 Windows 通过 Entity Framework 连接到 Informix 的问题
【发布时间】:2016-04-01 06:40:09
【问题描述】:

我一直在尝试使用 .Net 应用程序中的实体框架连接到 Informix 数据库,并且在每一步都遇到了许多问题。

尝试使用 testconn40 命令测试与数据库的连接,我得到以下信息:

SQL1159 使用 DB .NET 数据提供程序初始化错误,原因代码 7

尝试从我的 .Net 应用程序连接时出现以下异常:

无法加载文件或程序集“IBM.Data.DB2,版本=9.7.4.4, Culture=neutral, PublicKeyToken=7c307b91aa13d208' 或其其中之一 依赖关系。

【问题讨论】:

    标签: .net windows entity-framework informix


    【解决方案1】:

    以下内容适用于从运行 Windows 7 的 64 位计算机连接的 .NET 4.5.1 应用程序。

    从 Windows 连接:

    首先安装 IBM 数据服务器驱动程序包(DS 驱动程序):http://www-01.ibm.com/support/docview.wss?uid=swg21385217

    使用新名称通过命令行安装 10.5.5 补丁:

    v10.5fp5_ntx64_dsdriver_EN.exe -n "IBMDBCL2"
    

    在安装过程中设置为默认值,如果未能设置为默认值,则手动更新系统路径以指向第二个安装位置。就我而言:C:\Program Files\ibm\IBM DATA SERVER DRIVER_01\bin

    尝试从命令行运行以下命令:

    testconn40 "Database=<dbname>"; Server=<IP>:<Port>; User ID=<User>; Password=<Password>;"
    

    如果您收到类似以下的错误:

    SQL1159 使用 DB .NET 数据提供程序初始化错误,原因代码 7

    打开 regedit.exe 并导航到:HKEY_LOCAL_MACHINE\SOFTWARE\IBM\DB2\InstalledCopies\ 并确保有 IBMDBCL1 和 IBMDBCL2 的文件夹。如果您缺少 IBMDBCL2,则说明安装出现问题,因此您必须重新开始。

    在 InstalledCopies 文件夹中,确保有 10.5.5.DEF.4 的条目指向 IBMDBCL2。如果没有就加一个。 testconn40 命令现在应该可以通过了。

    使用 EntityFramework.IBM.DB2 包从 .Net 应用程序连接:

    正常安装包等,然后尝试运行应用程序。如果遇到以下异常:

    FileNotFoundException:无法加载文件或程序集 'IBM.Data.DB2, 版本=9.7.4.4,文化=中性,PublicKeyToken=7c307b91aa13d208' 或 它的依赖项之一。

    您可能缺少 GAC 的程序集。所以去驱动安装的地方:

    C:\Program Files\ibm\IBM DATA SERVER DRIVER_01\bin\netf40

    并在命令行上运行以下命令:

    gacutil /i IBM.DATA.DB2.dll
    gacutil /i IBM.DATA.informix.dll
    gacutil /i IBM.DATA.DB2.entity.dll
    

    然后您应该能够在以下位置看到程序集:C:\Windows\Microsoft.NET\assembly\GAC_64\

    如果你得到:

    BadImageFormatException:无法加载文件或程序集 'IBM.Data.DB2,版本=9.7.4.4,文化=中性, PublicKeyToken=7c307b91aa13d208' 或其依赖项之一。

    这意味着框架正在尝试使用 32 位 DLL。您可以明确告诉 Visual Studio 以 x64 方式运行,或者转到 Visual Studio 中的项目属性,并确保未选中“构建”选项卡下的“首选 32 位”。

    .dbo 前缀的问题:

    我遇到的最后一个问题是 Entity Framework 自动添加 dbo. 作为所有表名的前缀。 Informix 期望前缀是表的所有者(在我的例子中,用户帐户用于创建表)。在 Server Studio 中,您可以在表属性的常规选项卡上看到所有者。

    我能够通过将以下代码行添加到我的上下文类来解决(注意单引号):

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.HasDefaultSchema($"'{<DatabaseOwner>}'");
    
        ...
    }
    

    希望这可以帮助其他尝试通过 Entity Framework 连接到 Informix 的人。

    【讨论】:

      【解决方案2】:

      几个星期以来,我都遇到了同样的问题和 OP -

      无法加载文件或程序集“IBM.Data.DB2,版本=9.7.4.4, Culture=neutral, PublicKeyToken=7c307b91aa13d208' 或其其中之一 依赖关系。

      好吧,我调整了我的 .NET 项目 - 将其设置为仅 32 位。现在它起作用了。显然我的 IBM DB2 驱动程序只有 32 位,并且无法加载 64 位。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多