从Windows通过Entity Framework连接到Informix的问题

时间:2016-04-01 06:40:10

标签: .net windows entity-framework informix

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

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

  

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

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

  

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

2 个答案:

答案 0 :(得分:3)

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

从Windows连接:

首先安装IBM Data Server Driver Package(DS Driver):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&amp;的文件夹。 IBMDBCL2。如果您缺少IBMDBCL2,那么安装时出现了问题,因此您必须重新开始。

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

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

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

  

FileNotFoundException:无法加载文件或程序集'IBM.Data.DB2,   Version = 9.7.4.4,Culture = neutral,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,Version = 9.7.4.4,Culture = neutral,   PublicKeyToken = 7c307b91aa13d208'或其中一个依赖项。

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

.dbo前缀的问题:

我遇到的最后一个问题是实体框架自动添加 dbo。作为所有表名的前缀。 Informix期望前缀是表的所有者(在我的情况下,用于创建表的用户帐户)。在Server Studio中,您可以在表属性的“常规”选项卡上看到“所有者”。

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

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

    ...
}

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

答案 1 :(得分:0)

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

  

无法加载文件或程序集&#39; IBM.Data.DB2,Version = 9.7.4.4,   Culture = neutral,PublicKeyToken = 7c307b91aa13d208&#39;或其中一个   的依赖关系。

好吧,我调整了我的.NET项目 - 将其设置为仅32位。现在它有效。显然我的IBM DB2驱动程序只有32位,64位不会加载。