通过 Entity Framework 从 Windows 连接到 Informix 的问题
Issues connecting to Informix via Entity Framework from Windows
我一直在尝试使用 Entity Framework 从 .Net 应用程序连接到 Informix 数据库,并且在每一步都遇到 运行 无数问题。
尝试使用 testconn40 命令测试与数据库的连接,我得到以下信息:
SQL1159 Initialization error with DB .NET Data Provider, reason code 7
尝试从我的 .Net 应用程序连接时出现以下异常:
Could not load file or assembly 'IBM.Data.DB2, Version=9.7.4.4,
Culture=neutral, PublicKeyToken=7c307b91aa13d208' or one of its
dependencies.
以下是从 64 位计算机连接的 .NET 4.5.1 应用程序的全部内容 运行ning Windows 7.
从 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 Initialization error with DB .NET Data Provider, reason code 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: Could not load file or assembly 'IBM.Data.DB2,
Version=9.7.4.4, Culture=neutral, PublicKeyToken=7c307b91aa13d208' or
one of its dependencies.
您可能缺少来自 GAC 的程序集。所以去安装驱动程序的地方:
C:\程序Files\ibm\IBM数据服务器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: Could not load file or assembly
'IBM.Data.DB2, Version=9.7.4.4, Culture=neutral,
PublicKeyToken=7c307b91aa13d208' or one of its dependencies.
这意味着框架正在尝试使用 32 位 DLL。您可以明确告诉 Visual Studio 到 运行 作为 x64 或 转到 Visual Studio 中的项目属性并确保 'Prefer 32-bit' 在构建选项卡。
.dbo 前缀的问题:
我遇到的最后一个问题是 Entity Framework 自动添加 dbo. 作为所有 table 名称的前缀。 Informix 期望前缀是 table 的所有者(在我的例子中,用户帐户用于创建 table)。在 Server Studio 中,您可以在 table 属性的常规选项卡上看到所有者。
我能够通过将以下代码行添加到我的上下文中来解决 class(注意单引号):
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.HasDefaultSchema($"'{<DatabaseOwner>}'");
...
}
希望这可以帮助任何其他尝试通过 Entity Framework 连接到 Informix 的人。
几个星期以来,我一直遇到同样的问题和 OP -
Could not load file or assembly 'IBM.Data.DB2, Version=9.7.4.4,
Culture=neutral, PublicKeyToken=7c307b91aa13d208' or one of its
dependencies.
嗯,我调整了我的 .NET 项目 - 将其设置为仅 32 位。现在可以了。显然我的 IBM DB2 驱动程序只有 32 位,无法加载 64 位。
我一直在尝试使用 Entity Framework 从 .Net 应用程序连接到 Informix 数据库,并且在每一步都遇到 运行 无数问题。
尝试使用 testconn40 命令测试与数据库的连接,我得到以下信息:
SQL1159 Initialization error with DB .NET Data Provider, reason code 7
尝试从我的 .Net 应用程序连接时出现以下异常:
Could not load file or assembly 'IBM.Data.DB2, Version=9.7.4.4, Culture=neutral, PublicKeyToken=7c307b91aa13d208' or one of its dependencies.
以下是从 64 位计算机连接的 .NET 4.5.1 应用程序的全部内容 运行ning Windows 7.
从 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 Initialization error with DB .NET Data Provider, reason code 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: Could not load file or assembly 'IBM.Data.DB2, Version=9.7.4.4, Culture=neutral, PublicKeyToken=7c307b91aa13d208' or one of its dependencies.
您可能缺少来自 GAC 的程序集。所以去安装驱动程序的地方:
C:\程序Files\ibm\IBM数据服务器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: Could not load file or assembly 'IBM.Data.DB2, Version=9.7.4.4, Culture=neutral, PublicKeyToken=7c307b91aa13d208' or one of its dependencies.
这意味着框架正在尝试使用 32 位 DLL。您可以明确告诉 Visual Studio 到 运行 作为 x64 或 转到 Visual Studio 中的项目属性并确保 'Prefer 32-bit' 在构建选项卡。
.dbo 前缀的问题:
我遇到的最后一个问题是 Entity Framework 自动添加 dbo. 作为所有 table 名称的前缀。 Informix 期望前缀是 table 的所有者(在我的例子中,用户帐户用于创建 table)。在 Server Studio 中,您可以在 table 属性的常规选项卡上看到所有者。
我能够通过将以下代码行添加到我的上下文中来解决 class(注意单引号):
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.HasDefaultSchema($"'{<DatabaseOwner>}'");
...
}
希望这可以帮助任何其他尝试通过 Entity Framework 连接到 Informix 的人。
几个星期以来,我一直遇到同样的问题和 OP -
Could not load file or assembly 'IBM.Data.DB2, Version=9.7.4.4, Culture=neutral, PublicKeyToken=7c307b91aa13d208' or one of its dependencies.
嗯,我调整了我的 .NET 项目 - 将其设置为仅 32 位。现在可以了。显然我的 IBM DB2 驱动程序只有 32 位,无法加载 64 位。