I am getting below error while trying to connect Informix through Entity Framework:
No Entity Framework provider found for 'IBM.Data.DB2' ADO.NET provider. Make sure the provider is registered in the 'entityFramework' section of the application config file. See http://go.microsoft.com/fwlink/?LinkId=260882 for more information.
Here are the steps followed:
1) After installation of VS 2012
2) DB Server Client (v 9.7.5)- This installed in C:\Program Files\ibm\SQLLIBfolder
3) Didn’t have VS 2012 DB2 add-ins, as I can’t install them in Client environment and I guess these are not mandatory.
4) Tested the connection using:
C:\Program Files\ibm\SQLLIB\BIN>testconn40.exe Database=supplierportal;UserID=informix;password=*****;Server=server:12504;
C:\Program Files\IBM\SQLLIB\BIN>testconn40.exe server=servername:12345;database=SupplierPortal; userid
=informix;password=*****;
Step 1: Printing version info
.NET Framework version: 4.0.30319.17929
64-bit
DB2 .NET provider version: 9.7.4.4
DB2 .NET file version: 9.7.5.4
Capability bits: ALLDEFINED
Build: 20111018
Factory for invariant name IBM.Data.DB2 verified
Factory for invariant name IBM.Data.Informix verified
IBM.Data.Informix from DbFactory is the Common Informix .NET provider
Elapsed: 1.5468552
Step 2: Validating db2dsdriver.cfg against db2dsdriver.xsd schema file
File C:\ProgramData\IBM\DB2\DB2COPY1\cfg\db2dsdriver.cfg missing. Nothing to validate
Elapsed: 0.0156248
Step 3: Connecting using "server=servername:12345;database=SupplierPortal;userid=informix;password=*****"
Server type and version: IDS 11.50.0000
Elapsed: 1.6249792
Step 4: Selecting rows from informix.systables to validate existence of packages
SELECT * FROM informix.systables
Elapsed: 0.3437456
Step 5: Calling GetSchema for tables to validate existence of schema functions
Elapsed: 0.5937424
Test passed.
5) Created small solution to test with entity framework:
Here is important classes:
DbContext:
public partial class SupplierPortalContext : DbContext
{
static SupplierPortalContext()
{
Database.SetInitializer<SupplierPortalContext>(null);
}
public SupplierPortalContext()
: base("Name=SupplierPortalConnection")
{
}
public DbSet<Pouch> Pouches { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<System.Data.Entity.ModelConfiguration.Conventions.TableAttributeConvention>();
modelBuilder.Configurations.Add(new PouchMap());
}
}
Model Class:
[Table("pouch")]
public partial class Pouch
{
public int PouchId { get; set; }
public string BookingNum { get; set; }
}
Mapping:
public class PouchMap : EntityTypeConfiguration<Pouch>
{
public PouchMap()
{
// Primary Key
this.HasKey(t => t.PouchId);
// Properties
this.Property(t => t.PouchId)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
this.Property(t => t.BookingNum)
.HasMaxLength(50);
// Table & Column Mappings
this.ToTable("Pouch");
this.Property(t => t.PouchId).HasColumnName("PouchId");
this.Property(t => t.BookingNum).HasColumnName("BookingNum");
}
}
Added below code in main function to test the connection:
SupplierPortalContext ec = new SupplierPortalContext();
Console.WriteLine(ec.Database.Exists());
Throwing below error in second line:
No Entity Framework provider found for 'IBM.Data.DB2' ADO.NET provider. Make sure the provider is registered in the 'entityFramework' section of the application config file. See http://go.microsoft.com/fwlink/?LinkId=260882 for more information.
Other details:
DbProviderFactories section from machine.config file:
64 bit
<DbProviderFactories>
<add name="IBM DB2 .NET Data Provider" invariant="IBM.Data.DB2" description="IBM DB2 Data Provider for .NET Framework 4.0" type="IBM.Data.DB2.DB2Factory, IBM.Data.DB2, Version=9.7.4.4, Culture=neutral, PublicKeyToken=7c307b91aa13d208" />
<add name="IBM Informix .NET Data Provider" invariant="IBM.Data.Informix" description="IBM Informix Data Provider for .NET Framework 4.0" type="IBM.Data.Informix.IfxFactory, IBM.Data.Informix, Version=9.7.4.4, Culture=neutral, PublicKeyToken=7c307b91aa13d208" />
<add name="IBM DB2 .NET Data Provider 9.7.5" invariant="IBM.Data.DB2.9.7.5" description="IBM DB2 Data Provider 9.7.5 for .NET Framework 4.0" type="IBM.Data.DB2.DB2Factory, IBM.Data.DB2.9.7.5, Version=9.7.5.4, Culture=neutral, PublicKeyToken=7c307b91aa13d208" />
<add name="IBM Informix .NET Data Provider 9.7.5" invariant="IBM.Data.Informix.9.7.5" description="IBM Informix Data Provider 9.7.5 for .NET Framework 4.0" type="IBM.Data.Informix.IfxFactory, IBM.Data.Informix.9.7.5, Version=9.7.5.4, Culture=neutral, PublicKeyToken=7c307b91aa13d208" />
</DbProviderFactories>
32 bit
<DbProviderFactories>
<add name="IBM DB2 .NET Data Provider" invariant="IBM.Data.DB2" description="IBM DB2 Data Provider for .NET Framework 4.0" type="IBM.Data.DB2.DB2Factory, IBM.Data.DB2, Version=9.7.4.4, Culture=neutral, PublicKeyToken=7c307b91aa13d208" />
<add name="IBM Informix .NET Data Provider" invariant="IBM.Data.Informix" description="IBM Informix Data Provider for .NET Framework 4.0" type="IBM.Data.Informix.IfxFactory, IBM.Data.Informix, Version=9.7.4.4, Culture=neutral, PublicKeyToken=7c307b91aa13d208" />
<add name="IBM DB2 .NET Data Provider 9.7.5" invariant="IBM.Data.DB2.9.7.5" description="IBM DB2 Data Provider 9.7.5 for .NET Framework 4.0" type="IBM.Data.DB2.DB2Factory, IBM.Data.DB2.9.7.5, Version=9.7.5.4, Culture=neutral, PublicKeyToken=7c307b91aa13d208" />
<add name="IBM Informix .NET Data Provider 9.7.5" invariant="IBM.Data.Informix.9.7.5" description="IBM Informix Data Provider 9.7.5 for .NET Framework 4.0" type="IBM.Data.Informix.IfxFactory, IBM.Data.Informix.9.7.5, Version=9.7.5.4, Culture=neutral, PublicKeyToken=7c307b91aa13d208" />
</DbProviderFactories>
Added Entry at entityframework section in Config file:
<defaultConnectionFactory type="IBM.Data.DB2.Entity.DB2ConnectionFactory, EntityFramework, EntityFramework" />
Note:
I have used similar set up in my local machine (I have installed Informix dev server and DB client 10.* version.).
It is working without any issues.
Client keen on NHibernate, but we insisted on EntityFramework, but never thought of end up in this issue.
I really appreciate your efforts on this issue.
<defaultConnectionFactory type="IBM.Data.DB2.Entity.DB2ConnectionFactory, EntityFramework, EntityFramework" />