2016-07-14 23 views
0

私はアプリケーション用のサービスライブラリでEntity Frameworkを使用していますが、このDLLを参照するアプリケーションではEFに依存したくありません。次にEntity Frameworkを使用するDLLを使用する

  1. それは(私はこれがMSBuildの問題だと思う?)EntityFramework.dllへの参照を持っていない私は、接続を置くために必要だ
  2. :私たちが持っている問題は、メインアプリケーションが2つの問題があるあります文字列をメインアプリケーションApp.Configファイル

これには解決策がありますか、このDLLを使用するアプリケーションを受け入れるだけでよいのですか?NUFのインストールが必要ですか?

+0

「私は、主な用途app.configファイルに接続文字列を置くために必要なんだ」そして、なぜその問題がありますか? –

+0

EFを使用しているDLLのapp.configファイルに問題はありません。 EFを意識してはいけない消費アプリケーションの問題です。 – JohnStack

答えて

0

ライブラリがEntity Frameworkのコードにアクセスする必要がある場合は、EntityFramework.dllによって提供されるEntity Frameworkのコードが必要になります。

別のアプリケーションでライブラリを使用する場合は、EntityFramework DLLにコードも必要です。あなたは持っていないコードを実行することはできません。 (推移的)依存関係は避けられません。

+0

ありがとうございますが、消費するアプリケーションはEntity Frameworkにアクセスする必要はありません。 EFを使用してアクションを実行するサービスを実行するだけで済みます。 – JohnStack

+0

@JohnStack EFを使用する場合はEFが必要です。あなたはEFコードがあるので、dllをロードせずにEFを使うことはできません。 – Martijn

+0

ああ、私たちは、DLLが必要なものすべてできちんとした小さなパッケージにコンパイルされないと言っていますか?したがって、EFコードは、メインアプリケーションにもインストールする必要があるため、避けられない別個のDLLです。 – JohnStack

0

私は、アプリケーション用のサービスライブラリでEntity Frameworkを使用していますが、このDLLを参照するアプリケーションではEFに依存したくないです。

次に、ライブラリをEFを使用するクラスとそうでないクラスに分割する必要があります。あなたのライブラリがEFを使用している場合、アプリケーションはそれを参照する必要があります。そうしないと、実行時に参照エラーが発生します。

私はそれがどのようにアプリケーション設定作品をだ、メインアプリケーションのapp.configファイル

はいに接続文字列を置くために必要です。 app.config内のアプリケーション(すべての従属ライブラリを含む)を設定します。

+0

明確にするために、サービスクラスは消費するアプリケーションにエンティティオブジェクトを返しません。アプリケーション自体にはこれらの必要はなく、サービスがアクションを完了した場合、またはサービスが完了しなかった理由を確認する必要があります。 したがって、このサービスクラスを使用してEFを必要とするアプリケーションでは、迷​​惑なようです。 app.configには、この中に接続文字列を置く必要があります。私は、私たちの現在の解決策と同じ道筋に誰かを導いてはいけないという、私の元々の質問にそれらを押し付けなかった。 – JohnStack

0

ベストセラーのシナリオでは、メインの設定ファイルに接続文字列が必要です。 プロジェクトをコンパイルすると、ライブラリのdllがメインのbinフォルダにコピーされます。その後、ホストアプリケーションの設定ファイルから接続文字列の詳細を読み込みます。あなたはそれについて基本的に何もすることはできません。

メインプロジェクトのEFに依存しないようにしたい場合は、EFを含むコードを使用することはできません。

DBの最初のアプローチを使用すると、EFはデータのモデルクラスを作成します。私はあなたのEFの文脈にしか存在しないので、これらのクラスを使用しないことを好みます。基本的に再利用の目的で、別のライブラリにあるDTO(データ転送オブジェクト)を使用する方がよいでしょう。その後、EFから他のものに簡単に交換することができます。これが主な目的ではないことを覚えておいてください。主な目的は、分離の懸念を達成することです。

したがって、DTOを使用すると、あなたのメインアプリケーションがEFについて何も知る必要がないことを意味するDTOを使用してライブラリにデータを返すようにします。

は、ここで私が何を意味するかの例です:https://eidand.com/2014/08/17/separation-of-concerns-application-layers/

+0

ther replyに感謝します。私はすでにDTOを使用してサービスのリクエスト/結果を転送しています。なぜなら、なぜ消費アプリケーションでEFを使用する必要があるのか​​混乱しているからです。 残念ながら私は消費アプリケーションにEFをインストールする必要がありますので、結果として懸念を分けていません – JohnStack

関連する問題