2

Devart の dotConnect for Oracle の試用版を使用して、単純な概念実証を試みています。これは、現在 .Net フレームワーク OracleClient を使用しているためです (非推奨のため)。 Oracle Client または Instant Client です。このため、直接モードとエンタープライズ ライブラリ 5 (データ アクセス レイヤーで使用) を操作できることを考えると、dotConnect がその仕事に適したツールであることを上司に証明しようとしています。テスト アプリの app.config にカスタム プロバイダー マップを追加するなど、Devart が提供する例に従いました。これはすべて、IDE とコンパイルされたアプリケーションの両方で私の開発マシンで動作するように見えたので、簡単なセットアップと展開プロジェクトにまとめました。

働きたくないだけです。テストは単純な select ステートメントを実行し、リストビューに結果を表示します (存在する場合 - 存在しない場合はメッセージが表示されます)。私は実際には結果自体については気にしていません。単に結果を取得するという行為です。問題は、テストを実行すると、役に立たない EL エラーが発生することです。

Activation error occured while trying to get instance of type Database, key "Testing26_devart"

問題のあるコード行は次のとおりです。

Dim db As Database = EnterpriseLibraryContainer.Current.GetInstance(Of Database)(EnvironmentName)

app.config ファイルのプロバイダー マッピングは次のとおりです。

<add databaseType="Devart.Data.Oracle.EnterpriseLibrary.OracleDatabase, Devart.Data.Oracle.EnterpriseLibrary, Version=3.5.4456.40828, Culture=neutral, PublicKeyToken=null" name="Devart.Data.Oracle" />

app.config の接続文字列は次のとおりです。

<add name="Testing26_devart" connectionString="User Id=Testing26;Password=Testing26;Server=ORACLE-SERVER;Direct=True;Sid=DEVORA;Port=1523;"
        providerName="Devart.Data.Oracle" />

このエラーは、(とりわけ) 間違った接続文字列名を使用したことが原因で発生する可能性があることはわかっていますが、最初に構成ファイルから取得したため、これが正しいことはわかっています。また、これは開発環境で使用される構成とまったく同じです。内部例外は次のとおりです。

Microsoft.Practices.Unity.ResolutionFailedException: Resolution of the dependency failed, type = "Microsoft.Practices.EnterpriseLibrary.Data.Database", name = "Testing26_devart".

Exception occurred while: while resolving.

Exception is: InvalidOperationException - The type Database cannot be constructed. You must configure the container to supply this value.

System.Data.OracleClient接続文字列のプロバイダーを に変更すると、接続文字列を見つけるのにまったく問題はありませんが、サポートされていないキーワードDirect(dotConnect Direct モード スイッチから)について不平を言うため、プロバイダー マッピングが原因であると思われます。

プロバイダーのマッピングに関して、私が何を間違ったのかわかりません。以前は使用したことがありませんが、EL 構成ツールを使用して正しいことを確認しました。カスタム ライブラリは実行可能ファイル (および他の EL ライブラリ) に含まれています。いくつかの例を見てきましたが、どれも正しい構成を持っていることを示唆しています。これは私を夢中にさせています。

4

1 に答える 1

2

DbProviderFactoryが構成されていないようです。おそらく、Devartソフトウェアをインストールすると、machine.configにDbProviderFactoryがインストールされます。DbProviderFactoryが存在するかどうか、開発マシンのmachine.configを確認してください。

machine.configを変更したくない場合は、設定情報をapp.configに追加できます。次のようになります。

  <system.data>
    <DbProviderFactories>
      <add name="dotConnect for Oracle" invariant="Devart.Data.Oracle" 
description="Devart dotConnect for Oracle" type="Devart.Data.Oracle.OracleProviderFactory, Devart.Data.Oracle" />        
    </DbProviderFactories>
  </system.data>

私はDevartライブラリに精通していないため、VersionまたはPublicKeyTokenがどうなるかわかりません。

Enterprise LibraryがDbProviderFactoryを見つけられない場合、データベースは登録されず、データベースにアクセスしようとすると、オブジェクトがコンテナ内に見つからないというメッセージが表示されます。

于 2012-04-11T18:37:13.567 に答える