2013-07-08 70 views
8

我正在嘗試使用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

但是,安裝,因爲

  1. 我可以看到在GAC中的DLL。
  2. 它在machine.config中提到。
  3. 它被我的項目引用。
  4. 我實際上用它從數據庫中生成我的EDMX。
  5. 我覈實,我引用正確的版本(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」/>存在,其註釋掉,然後再試一次,否則,如果它不存在,把它放在然後再試一次。

+0

是的。你的回答指出我的方向是正確的,所以,我將它標記爲答案並且贊成。 –

+0

謝謝男人:)。祝你好運 – Andrei

+0

LOL。我又有同樣的錯誤,我的谷歌搜索答案讓我回到自己的問題。 –

回答

1

嘗試這個連接字符串格式:

Provider=msdaora;Data Source=MyOracleDB;User Id=myUsername;Password=myPassword; 

退房的連接字符串的例子爲Oracle數據庫http://www.connectionstrings.com/oracle

+0

該解決方案必須處理連接字符串格式,但不符合您的預期。查看更新。 –

1

有人在那裏另一種可能的解決方案。

我的webapp在我的測試服務器上運行良好,但是當我開始爲我的活服務器開發時,出現同樣的錯誤: 無法找到請求的.Net Framework數據提供程序。它可能沒有安裝

如果您比較下面的兩個連接字符串,您會注意到引起我的問​​題的那個字符串在提供程序名稱中有「託管」字。我實際上使用Oracle提供程序的非託管版本。因此,我在我的實時服務器上得到錯誤,而不是在我的測試服務器上。

**ORIGINAL:** 
    connectionString="DATA SOURCE=192.168.10.101:1521/dataconn;PASSWORD=password;PERSIST SECURITY INFO=True;USER ID=DataConn" providerName="Oracle.ManagedDataAccess.Client" 


    **NEW:** 
    connectionString="DATA SOURCE=192.168.10.101:1521/dataconn;PASSWORD=password;PERSIST  SECURITY INFO=True;USER ID=DataConn" providerName="Oracle.DataAccess.Client" 
2

這個錯誤有點誤導,因爲它也可能是由錯誤的CPU環境下運行引起的。如果使用32位Oracle驅動程序,請確保允許使用32位。這可以通過IIS下的設置來完成,或者您可以將應用程序設置爲以IIS Express應用程序的形式運行。

+0

謝謝,這幫我節省了幾個小時的時間。 – user1841243

7

對我們來說,它是32位和64位的過程。

服務器是64位。 安裝的ODP.NET(Oracle客戶端)也是64位。與目標平臺「任何CPU」和編譯 我們的應用程序「首選32位」標誌設置:

http://grab.by/v5ki

正在運行的32位進程。 一旦重新編譯標誌未檢查一切開始工作。

+0

對我來說,我使用AnyCPU,但沒有檢查32位。但是,它必須默認爲32位。一旦我將它設置爲x64,它可以加載x64 dll(我只安裝了64位Oracle) – jessewolfe

3

當通過IIS,64位Win7打開頁面時,我得到了同樣的錯誤。

我的解決辦法是:

進入IIS管理器 - >應用程序池 - >高級設置 - >啓用32位應用程序。

enter image description here

1

這裏是我工作。我的服務器已經安裝了Oracle客戶端。 (11.2.0版)從ODAC for Windows Downloads頁面ODP.NET管理的驅動程序
(我選的是2015年10月發佈,2.43 MB下載)

  • zip文件解壓縮,搶

    • 下載\ lib \ net40 \ Oracle.ManagedDataAccess.dll,並將其放在bin文件夾中。

    • 在web.config中,添加對在this answer中解釋的system.data \ DbProviderFactory下的ODP.NET託管驅動程序的引用。

    就是這樣。

    要確認,請運行此answer's code以查看是否安裝了ODP.NET提供程序。您應該在列表中看到ODP.NET,Managed Driver。

  • 1

    我有一個類似的問題。它通過添加一個NuGet包來解決。我已經在我的ODT安裝引用中提供了Oracle.ManagedDataAccess.EntityFramework,但它在詳細日誌中給出了與實體框架5衝突的問題。一旦我添加了NuGet包,一切都開始工作。

    • 要安裝,請右鍵單擊引用 - >管理NuGet包... - >在瀏覽選項卡中搜索Oracle - >選擇Oracle.ManagedDataAccess.EntityFramework並安裝最新版本。
    相關問題