繁体   English   中英

IBM DB2 I系列数据库的实体框架提供程序错误

[英]Entity framework provider error with IBM DB2 I Series database

好的,这是我的问题,我想以数据库优先的方式将实体框架与DB2 for I系列数据库一起使用,但是要获得成功的连接确实非常复杂。

首先,我试图使用“ IBM DB2和IDS服务器”数据源创建一个实体数据模型,但是尽管我成功地建立了与LUW DB2的连接,但是我无法使用DB2 for I系列来做到这一点,尝试使用端口446,它说存在许可证问题,9471产生了连接错误,8471一直等待,50000没有成功,我什至尝试不使用端口,但是没有用。

数据源选择

连接属性

因此,我选择使用IBM DB2 for i数据源,该选项允许我进行连接,但是当我尝试使用Entity Framework 6.1.3时,出现一条错误消息,告诉我EF 6.x与该版本不兼容。

i系列的数据源

在此处输入图片说明

因此,我将EF降级为5.0,以尝试以任何方式创建实体模型,然后升级EF版本,但是,当我选择EF 5.0之后单击下一步时,实体数据模型向导消失了,然后显示数据库对象和设置,并且模型无法创建。

然后我决定不需要一个edmx文件,因为连接正常,我可以手动进行映射,因此我开始创建类来进行映射:

AppContext:

public class AppContext: DbContext
{
    public AppContext() : base( "connectionString" )
    {
    }

    public DbSet<Data> Datas { get; set; }
}

数据:[Table(“ data”)]公共类Data {[Column(“ id”)] public int Id {get; 组; }

    [Column("name")]
    public string Name { get; set; }
}    

最后是测试:

public class Program
{
    static void Main(string[] args)
    {

        using (var ctx = new AppContext())
        {
            Data data = new Data() { Id = 1, Name = "A Name" };

            ctx.Datas.Add(data);
            ctx.SaveChanges();                
        }
    }
}

我安装了EntityFramework.IBM.DB2 nuget版本6.0.7,并更改了Web.config以添加连接字符串,我找到了一个名为“ IBM.Data.DB2”的新提供程序并测试了连接,但是我开始遇到相同的问题我在第一个连接中使用了不同的端口。

因此,我认为该提供程序必须是第一个连接的提供程序,并且我需要一个I系列的提供程序,因为我将提供程序更改为“ IBM.Data.DB2.iSeries”,然后再次尝试更改连接字符串中的某些参数,但是现在我我收到此错误:

实体框架提供程序类型'IBM.Data.DB2.iSeries.iDB2Factory,IBM.Data.DB2.iSeries,Version = 12.0.0.0,Culture = neutral,PublicKeyToken = 9cdb2ebfb1f93a26'的'Instance'成员未返回以下对象继承自'System.Data.Entity.Core.Common.DbProviderServices'。 实体框架提供程序必须从此类继承,并且“实例”成员必须返回提供程序的单例实例。 这可能是因为提供程序不支持Entity Framework 6或更高版本。 有关更多信息,请参见http://go.microsoft.com/fwlink/?LinkId=260882

这是我的Web.config中的连接字符串和提供程序:

<connectionStrings>
    <add name="DB2Connection" providerName="IBM.Data.DB2" connectionString="DataSource=192.168.1.54;UserID=XXXX;DefaultCollection=XXXX;Database=DB10000010; Password=XXXXXX;" />
    <add name="connectionString" providerName="IBM.Data.DB2.iSeries" connectionString="Server=192.168.1.54;UserID=XXXXX;Database=DB100000010; Password=XXXXX;" />
</connectionStrings>

<providers>
    <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    <provider invariantName="IBM.Data.DB2" type="IBM.Data.DB2.EntityFramework.DB2ProviderServices, IBM.Data.DB2.EntityFramework, Version=10.5.5.6, Culture=neutral, PublicKeyToken=7c307b91aa13d208" />
    <provider invariantName="IBM.Data.DB2.iSeries" type="IBM.Data.DB2.iSeries.iDB2Factory, IBM.Data.DB2.iSeries, Version=12.0.0.0, Culture=neutral, PublicKeyToken=9cdb2ebfb1f93a26" />
</providers>

我还找到了一个新的IBM I Access,该产品应该替代Windows提供商的旧IBM DB2 i系列,但是找不到与其兼容的数据源。

IBM I Access应用程序

好的,所以我没什么主意了,有人可以帮助我将实体框架与IBM DB2 for i系列一起使用吗?

谢谢

要与DB2 iSeries进行连接,必须使用端口446进行连接。存在虱子问题。 您必须与IBM联系以获得许可证:

ADM12008C产品“ IBM数据服务器驱动程序软件包”没有安装有效的许可证密钥,并且评估期已到期。 未启用此产品特定的功能。 如果您已获得此产品的许可,请确保正确安装了许可证密钥。 您可以使用db2licm命令安装许可证。 可以从您的许可产品CD中获得许可证文件。

单击此链接以获取更多信息:

https://www.ibm.com/developerworks/community/forums/html/topic?id=9a107d00-d814-440c-b438-faa4d020ae1a&ps=100

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM