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
- I can see the dll in the GAC.
- It is mentioned in machine.config.
- It is referenced by my project.
- I actually use it to generate my EDMX from the database.
- 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.