使用 IBM.EntityFrameworkCore 的 IBM Informix 连接问题

问题描述 投票:0回答:0

我正在尝试使用官方 IBM Nuget 库 IBM.EntityFrameworkCore 6.0.300 连接到 IBM Informix 数据库。打开连接后出现错误:

Culture is not supported. (Parameter 'culture')
4096 (0x1000) is an invalid culture identifier.

我的 DbContext 类是:

public class AppDbContext : DbContext
{
    public AppDbContext() : base() { }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseDb2
        (@"Host=10.216.1.6:1526;Server=my_server;Database=my_database;userid=my_user;password=*******", p => p.SetServerInfo(IBMDBServerType.IDS));
    }

    public DbSet<Flyer> Flyers => Set<Flyer>();
}

有什么解决这个问题的建议吗?

编辑:

异常调用栈为:

   at System.Globalization.CultureInfo..ctor(Int32 culture, Boolean useUserOverride)
   at IBM.Data.Db2.ODC.InvalidArgument()
   at IBM.Data.Db2.DB2ConnPool.ReplaceConnectionStringParms(DB2Connection connection, String szValue, DB2ConnSettings& pSettings, DB2ConnSettingsInternal& pSettingsInternal, Boolean bAttach, Boolean pushDownStrAppended)
   at IBM.Data.Db2.DB2Connection.set_ConnectionString(String value)
   at IBM.Data.Db2.DB2Connection..ctor(String connectionString)
   at IBM.EntityFrameworkCore.Storage.Internal.Db2SqlConnection.CreateDbConnection()
   at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.get_DbConnection()
   at IBM.EntityFrameworkCore.Storage.Db2RelationalCommand.CreateDbCommand(RelationalCommandParameterObject parameterObject, Guid commandId, DbCommandMethod commandMethod)
   at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReader(RelationalCommandParameterObject parameterObject)
   at Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable`1.Enumerator.InitializeReader(Enumerator enumerator)
   at Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable`1.Enumerator.MoveNext()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at WpfApp3.MainWindow..ctor() in C:\Users\guillermoec\source\repos\WpfApp3\WpfApp3\MainWindow.xaml.cs:line 31

编辑#2:

我解决了与文化相关的问题:我简单地添加了 en_US 组合作为一种计算机语言并且它起作用了。之前我只安装了 fr_CH 和 en_CH 语言。

如评论所说,连接字符串错误。我改变了它,现在看起来像这样:

optionsBuilder.UseDb2(@"Server=10.216.1.6:1526;Database=my_database;user id=my_user;password=*******", p => {
                p.SetServerInfo(IBMDBServerType.IDS);
            });

但是还是不行,我得到一个新的错误:

ERROR [08001] [IBM] SQL30081N  A communication error has been detected. Communication protocol being used: "TCP/IP".  Communication API being used: "SOCKETS".  Location where the error was detected: "10.216.1.6".  Communication function detecting the error: "recv".  Protocol specific error code(s): "*", "*", "0".  SQLSTATE=08001

和堆栈跟踪:

   at IBM.Data.Db2.DB2ConnPool.Open(DB2Connection connection, String& szConnectionString, DB2ConnSettings& ppSettings, Object& ppConn)
   at IBM.Data.Db2.DB2Connection.Open()
   at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenInternal(Boolean errorsExpected)
   at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Open(Boolean errorsExpected)
   at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReader(RelationalCommandParameterObject parameterObject)
   at Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable`1.Enumerator.InitializeReader(Enumerator enumerator)
   at Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable`1.Enumerator.MoveNext()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at WpfApp3.MainWindow..ctor() in C:\Users\guillermoec\source\repos\WpfApp3\WpfApp3\MainWindow.xaml.cs:line 33

我安装了 Informix SDK 4.50 并为我的数据库配置了一个新的 ODBC 数据源。我尝试使用库

IfxConnection
中的方法
Informix.Net.Core.dll
打开与数据库的连接。我可以使用此连接字符串成功连接到数据库:

@"Host=10.216.1.6:1526;Server=instance_name;Database=my_database;User ID=my_userid;Password=*******"

数据库版本是11.50,会不会跟DB版本有关?

我们在同一台机器上还有其他实例,这会影响数据库连接吗?

c# entity-framework-core websphere .net-6.0 informix
© www.soinside.com 2019 - 2024. All rights reserved.