我正在嘗試使用Oracle 11g Express和.NET 4.0框架開發ASP.NET MVC 4.0應用程序。我可以使用ODP.NET提供程序連接到數據庫,也可以針對數據庫生成我的EDMX。我不能做的是使用實體框架查詢底層數據庫。當使用產生的ConnectionString Visual Studio的實例我的DbContext,我得到以下錯誤:ODP.NET錯誤無法找到請求的.Net Framework數據提供程序
Unable to find the requested .Net Framework Data Provider. It may not be installed
但是,安裝,因爲
- 我可以看到在GAC中的DLL。
- 它在machine.config中提到。
- 它被我的項目引用。
- 我實際上用它從數據庫中生成我的EDMX。
- 我覈實,我引用正確的版本(4.112.3.0)到處
我運行的代碼在本地卡西尼和我的硬件是32位架構,所以我會認爲我只會能夠使用32位DLL,所以它不是一個架構問題。
特定的代碼位是這樣的:
public class MyContext : ObjectContext, IUnitOfWork
{
public MyContext()
: base(ConfigurationManager
.ConnectionStrings["OracleEntities"]
.ConnectionString)//Connectionstring is verified
{}
}
請幫我之前,我放下一切,長出鬍子,並在山上去住的地方。
解決方案:由於我沒有看到任何提及的解決方案,我會在這裏提到它的後代。下面的Andrei Mikhalevich詢問了我的連接字符串格式,儘管我很有理由,但我去看了一下。這是我看到:
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
現在,要特別注意
provider=provider=Oracle.DataAccess.Client;
它應該,其實,讀
provider=Oracle.DataAccess.Client;
否則你告訴EF線使用[provider.dll],這不是一件真實的事情。另請注意,似乎connectionString元素的providerName屬性似乎已被覆蓋或被忽略。
UPDATE 2:如果此STILL不起作用,請查看machine.config。您應該看到以下部分:
<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>
如果<刪除不變=「Oracle.DataAccess.Client」/>存在,其註釋掉,然後再試一次,否則,如果它不存在,把它放在然後再試一次。
是的。你的回答指出我的方向是正確的,所以,我將它標記爲答案並且贊成。 –
謝謝男人:)。祝你好運 – Andrei
LOL。我又有同樣的錯誤,我的谷歌搜索答案讓我回到自己的問題。 –