C# – ODP.NET error Unable to find the Requested .Net Framework Data Provider

asp.netasp.net-mvccodp.netoracle11g

I am trying to develop an ASP.NET MVC 4.0 application using Oracle 11g Express and the .NET 4.0 framework. I can connect to the DB using the ODP.NET provider and can also generate my EDMX against the database. What I can't do is query the underlying DB using entity framework. When instantiating my DbContext using the connectionString Visual Studio generated, I get the following error:

Unable to find the requested .Net Framework Data Provider. It may not be installed

However, it is installed because

  1. I can see the dll in the GAC.
  2. It is mentioned in machine.config.
  3. It is referenced by my project.
  4. I actually use it to generate my EDMX from the database.
  5. I have verified that I am referencing the correct version (4.112.3.0) everywhere

I am running the code locally on Cassini and my hardware is 32-Bit architecture, so I would assume I would only be able to use 32-Bit DLL's, so it's not an architecture problem.

The specific bit of code is as such:

public class MyContext : ObjectContext, IUnitOfWork
{
    public MyContext() 
    : base(ConfigurationManager
          .ConnectionStrings["OracleEntities"]
          .ConnectionString)//Connectionstring is verified
    {}
}

please help me before I leave everything, grow a beard and go live in the mountains somewhere.

SOLUTION: Since I haven't seen any mention of the solution, I'll mention it here for future generations. Andrei below asked about my connection string format and although I was scheptical, I went and had a look. This is what I saw:

metadata=res://*/OracleModel.csdl|res://*/
OracleModel.ssdl|res://*/
OracleModel.msl;
provider=provider=Oracle.DataAccess.Client;
provider connection string="DATA SOURCE=localhost:1521;
PASSWORD=xxx;PERSIST SECURITY INFO=True;USER ID=xxx

Now, pay special attention to the line

provider=provider=Oracle.DataAccess.Client;

it should, in fact, read

provider=Oracle.DataAccess.Client;

otherwise you're telling EF to use [provider.dll], which isn't a real thing. Also note that it seems that the providerName property of the connectionString element seems to have been overridden or ignored.

UPDATE 2: If this STILL does not help, have a look at machine.config. You should see the following section:

<add name="Oracle Data Provider for .NET" invariant="Oracle.DataAccess.Client" description="Oracle Data Provider for .NET" type="Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />

  <remove invariant="Oracle.DataAccess.Client" />

</DbProviderFactories>

If <remove invariant="Oracle.DataAccess.Client" /> is present, comment it out and try again, otherwise, if it's not there, put it in and try again.

Best Answer

For us it was 32 vs. 64 bit process.

The server is 64 bit. The ODP.NET (Oracle Client) installed is also 64 bit. Our application compiled with the Target platform "Any CPU" and "Prefer 32-bit" flag SET:

http://grab.by/v5ki

was running as 32 bit process. Once recompiled with the flag un-checked everything started to work.

Related Topic