web-dev-qa-db-ja.com

ODP.NETエラー要求された.NetFrameworkデータプロバイダーが見つかりません

Oracle 11gExpressと.NET4.0フレームワークを使用してASP.NETMVC4.0アプリケーションを開発しようとしています。 ODP.NETプロバイダーを使用してDBに接続でき、データベースに対してEDMXを生成することもできます。私ができないことは、エンティティフレームワークを使用して基になるDBにクエリを実行することです。生成されたconnectionStringVisual Studioを使用してDbContextをインスタンス化すると、次のエラーが発生します。

要求された.NetFrameworkデータプロバイダーが見つかりません。インストールされていない可能性があります

ただし、インストールされているのは

  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
    {}
}

私がすべてを離れる前に私を助けてください、あごひげを生やして、どこかの山に住んでください。

[〜#〜] solution [〜#〜]:解決策についての言及は見たことがないので、将来の世代のためにここで言及します。以下のAndreiは、接続文字列の形式について質問しました。私は大雑把でしたが、行って見てみました。これは私が見たものです:

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;

itshould、実際には、

provider=Oracle.DataAccess.Client;

それ以外の場合は、EFに[provider.dll]を使用するように指示していますが、これは本物ではありません。また、connectionString要素のproviderNameプロパティがオーバーライドまたは無視されているように見えることにも注意してください。

PDATE 2:これでも問題が解決しない場合は、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>

<remove invariant = "Oracle.DataAccess.Client" />が存在する場合は、コメントアウトして再試行します。存在しない場合は、入力して再試行します。

11

次の接続文字列形式を試してください。

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

Oracleデータベースの接続文字列の例を確認してください http://www.connectionstrings.com/Oracle

1
Andrei

私たちにとっては、32ビットプロセスと64ビットプロセスでした。

サーバーは64ビットです。インストールされているODP.NET(Oracleクライアント)も64ビットです。ターゲットプラットフォームの「AnyCPU」および「Prefer32bit」フラグを使用してコンパイルされたアプリケーション:SET:

http://grab.by/v5ki

32ビットプロセスとして実行されていました。フラグをオフにして再コンパイルすると、すべてが機能し始めました。

7
Greg Z.

IIS、64ビットWin7を介してページを開くと、同じエラーが発生しました。

私の解決策は次のとおりです。

IISマネージャー->アプリケーションプール->詳細設定-> 32ビットアプリケーションを有効にする]に移動します。

enter image description here

4
lakant

私も同様の問題を抱えていました。 NuGetパッケージを追加することで解決しました。 ODTのインストールからの参照でOracle.ManagedDataAccess.EntityFrameworkをすでに利用できましたが、詳細ログでEntity Framework5と6の競合が発生していました。 NuGetパッケージを追加すると、すべてが機能し始めました。

  • インストールするには、[参照]-> [NuGetパッケージの管理...]を右クリックします-> [参照]タブでOracleを検索します-> [Oracle.ManagedDataAccess.EntityFramework]を選択し、最新バージョンをインストールします。
3
roadrunner71

このエラーは、間違ったCPUコンテキストで実行されていることが原因である可能性もあるため、少し誤解を招く可能性があります。 32ビットのOracleドライバを使用している場合は、32ビットを許可していることを確認してください。これは、IISの下の設定として実行するか、アプリケーションをIIS Expressアプリケーションとして実行するように設定できます。

2
Joseph Wykel

これが私のために働いたものです。私のサーバーにはすでにOracleクライアントがインストールされています。 (バージョン11.2.0)

  • ODAC for Windows Downloads ページからダウンロードODP.NETマネージドドライバー
    (2015年10月のリリース、2.43 MBのダウンロードを選択しました)

  • Zipファイルを解凍し、\ lib\net40\Oracle.ManagedDataAccess.dllを取得して、binフォルダーに配置します。

  • Web.configで、 この回答 で説明されているsystem.data\DbProviderFactoriesの下にODP.NETマネージドライバーへの参照を追加します。

それでおしまい。

確認するには、これを実行します 回答のコード ODP.NETプロバイダーがインストールされているかどうかを確認します。リストにODP.NET、マネージドドライバーが表示されます。

1
James Lawruk

そこに誰かのための別の可能な解決策。

Webアプリケーションはテストサーバーで正常に機能していましたが、ライブサーバー用に開発を開始すると、同じエラーが発生しました。要求された.NetFrameworkデータプロバイダーが見つかりません。インストールされていない可能性があります

以下の2つの接続文字列を比較すると、問題の原因となっている接続文字列のプロバイダー名に「管理対象」の単語が含まれていることがわかります。私は実際にアンマネージバージョンの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"
1
Jose G

実際にODACをダウンロードしてインストールしました。次に、参照を追加して、言及されているパッケージroadrunner71を見つけました。

0
Johnny Wu