我一直在尝试使用.Net应用程序中的Entity Framework连接到Informix数据库,并且每一步都遇到了很多问题。
尝试使用testconn40命令测试与数据库的连接我得到以下内容:
SQL1159与DB .NET数据提供程序的初始化错误,原因码7
尝试从我的.Net应用程序连接时出现以下异常:
无法加载文件或程序集'IBM.Data.DB2,Version = 9.7.4.4, Culture = neutral,PublicKeyToken = 7c307b91aa13d208'或其中一个 的依赖关系。
答案 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位不会加载。