0

私は、(おそらく不必要に) いくつかのレベルで階層化されたアプリケーションを作成しました。1 つは UI で、もう 1 つは Windows サービスです。両方とも、共有プロジェクトでアプリケーションを駆動する実際のコードを持っています (そのため、アプリの実行方法を更新するときに、UI とサービスの両方でコードを更新する必要はありません)。共有されたオペレーティング コードに加えて、共有プロジェクトには基本クラスと、追加、スヌーズ、すぐに実行できる他のプラグイン モジュール (クラス プロジェクト) の API を定義するインターフェイスも含まれています。UI/サービスが行うことはすべて、各プラグインを実行するように指示し、各プラグインが生成した結果を電子メールで送信します。

共有プロジェクトのメイン データ モデルに加えて、これらのプラグイン プロジェクト内で個別のデータ モデルを生成できるようにしたいと考えています。これは、プラグイン用の新しいテーブルを追加するたびにサービスを再インストールする必要がないようにするためです。データ モデルをプラグイン内に保持することで、プラグインを更新するだけで、サービスまたは UI を実行したままにすることができます。「指定された名前付き接続が構成で見つからないか、EntityClient プロバイダーでの使用を意図していないか、無効です。」という問題を解決できません。エラー。プラグインの接続文字列を app.config ファイルから共有プロジェクトの app.config ファイルと UI の app.config ファイルに既にコピーしました。.edmx ファイルをプラグインから共有プロジェクトと UI プロジェクトにコピーしました。それでも私は まだこのエラーが発生しています。接続文字列で参照されている .csdl、ssdl、および .msl ファイルと関係があるかどうか疑問に思っています (例:res://*/ATS.csdl)。.edmx ファイルがある 3 つのプロジェクトすべてのディレクトリにこれらのファイルが表示され\obj\Debug\edmxResourcesToEmbedますが、コピーすることがわかっているすべての情報がどこにでもコピーできるにもかかわらず、プラグインを使用してデータベースに接続できません。 . 何か案は?

ETA : app.config ファイルから接続文字列を逐語的にコピーし、新しいエンティティ オブジェクトを作成するときにそれを指定すると、接続が正常に作成され、データベースにクエリを実行できることがわかりました。そのため、一部の app.config には接続文字列がありませんが、必要なすべてのものには接続文字列が含まれているようです。

ETA 2 : シンボルのデバッグをオンにして、System.Data.EntityClient.EntityConnection失敗している正確な部分を掘り下げました。ConfigurationManager.ConnectionStringsコレクションを見ていますが、_itemsメンバー (ファイルにリストされているすべての接続文字列を含むと予想されるapp.config) には、SQLEXPRESS データベースの "LocalSqlServer" エントリのみが含まれています。もちろん、指定した名前で接続文字列を見つけようとすると、読み取っている構成ファイルにそれが含まれていないため、できません。これを正しく機能させる方法をまだ探しています...

4

1 に答える 1

0

私は問題を解決したと思いますが、それは厄介な解決策であり、よりエレガントにできるかどうかを知りたいです. ただし、Kamyar からのヒントのおかげで、最終的には次のようになりました。

シンボルのデバッグ中にクラス内をうろうろし始めEntityConnectionたところ、.NET が構成ファイルから接続文字列を取得する必要があると思っていたように取得していないことに気付きました。Kamyar は.dll.config、プラグイン用のファイルを作成することを提案しましたが、私はそれを実行しましたが、それでも機能しませんでした...エンティティ フレームワークが、プラグイン dll ではなく、ホスト実行可能ファイルの構成ファイルを探していたためです。そこで、ホスト アプリケーションのapp.configファイルをスタンドアロン プラグインのロード元のディレクトリにコピーし、名前を付けて[Application].exe.config、すぐに取得しました。

ホストの構成ファイルのコピーではなく、すべてのプラグインが参照する必要がある構成ファイルをどこかで指定できる、より良い方法があるかどうか疑問に思っていますが、接続文字列を指定する必要がないことを嬉しく思います私のコードで。

于 2012-08-02T14:32:26.103 に答える