好的,这是我的问题,我想首先用数据库的方式,使用DB2 for i系列数据库的实体框架,但是要获得成功的连接是非常复杂的。
首先,我试图使用"IBM DB2和入侵检测服务器“数据源创建实体数据模型,但尽管我成功地创建了到LUW DB2的连接,但我无法使用DB2 for I系列,但我尝试了端口446,它说存在许可证问题,9471生成了一个连接错误,8471继续等待,50000没有成功,我甚至尝试使用没有端口,但它没有工作。
因此,我选择使用IBM数据源,这个选项允许我连接,但是当我尝试使用EntityFramework6.1.3时,我得到一个错误,告诉我EF6.x与这个版本不兼容。
因此,我将EF降级到5.0版本,尝试以任何方式创建实体模型,然后升级EF版本,但是,在选择EF5.0之后单击next时,实体数据模型向导在显示数据库对象和设置之前消失,模型不会被创建。
然后,我决定不需要edmx文件,我现在可以手动进行映射了,所以我开始创建类来执行映射:
AppContext:
public class AppContext: DbContext
{
public AppContext() : base( "connectionString" )
{
}
public DbSet<Data> Datas { get; set; }
}
数据:表(“数据”)公共类数据{列(“Id”)公共int Id{ get;set;}
[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‘没有返回继承自IBM.Data.DB2.iSeries.iDB2Factory的对象。实体框架提供程序必须继承此类,“实例”成员必须返回提供程序的单例实例。这可能是因为提供程序不支持实体框架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,它应该取代以前的IBM DB2 i系列用于windows提供程序,但是找不到与它一起工作的数据源。
好的,我的想法不多了,有人能帮我使用IBM系列的实体框架吗?
谢谢
发布于 2018-03-21 11:01:06
要与DB2 iSeries连接,必须使用端口446进行连接。这是一个令人头疼的问题。您必须与IBM联系才能获得许可证:
ADM12008C产品“”没有安装有效的许可证密钥,评估期已经过期。未启用特定于此产品的功能。如果您已授权此产品,请确保许可证密钥已正确安装。您可以使用db2licm命令安装许可证。许可文件可以从您的授权产品CD中获得。
请按照此链接获取更多信息:
https://stackoverflow.com/questions/44727930
复制相似问题