web-dev-qa-db-ja.com

Entity Frameworkプロバイダーの例外を解決する方法

WCFプロジェクトをサーバーに公開しました。また、WCFサービスを使用する同じボックスにMVCアプリケーションを公開しました。

MVCアプリケーションでログインしようとすると、これはwcfサービスを使用しますが、ブラウザーでこの例外が発生します。

エンティティフレームワークプロバイダータイプ 'System.Data.Entity.SqlServer.SqlProviderServices、EntityFramework.SqlServer'は、不変名「System.Data.SqlClient」のADO.NETプロバイダーのアプリケーション構成ファイルに登録できませんでした。アセンブリ修飾名が使用されていること、および実行中のアプリケーションがアセンブリを使用できることを確認してください。

これはエンティティフレームワークの例外ですが、サービスプロジェクトを展開した後、私のプロジェクトは既に開発環境でEFを参照しているため、DLLにもEF参照が含まれているはずですが、このエラーが発生する理由はわかりません。

このメッセージは、includeExceptionDetailInFaults="True"

14
ife labolz

@FranciscoGoldenstein言って!コンソールアプリケーションなどにEntity Frameworkをインストールする必要はありません。AssemblyEntityFramework.SqlServer.dllへの参照を追加するだけです。 Entity Frameworkを使用するクラスライブラリプロジェクトからこのアセンブリをLIBフォルダーにコピーし、参照を追加できます。

要約すれば:

  • クラスライブラリアプリケーション:
    • Entity Frameworkのインストール
    • データレイヤーコードを書く
    • app.configファイルには、接続文字列を除き、Entity Frameworkに関連するすべての構成が含まれています。
  • コンソール、Web、またはデスクトップアプリケーションを作成します。
    • 最初のプロジェクトへの参照を追加します。
    • EntityFramework.SqlServer.dllへの参照を追加します。
    • app.config/web.configには接続文字列があります(構成エントリの名前はDbContextクラスの名前と同じでなければならないことに注意してください。

それは私のための仕事です!役に立てば幸いです。

また、このリンクを試してみてください Entity Framework Providerタイプをロードできませんでした?

16
Nazmul Hasan

この問題を解決する最も簡単なトリックは、EFプロジェクトのクラスの1つに次の行を追加することです。

public class Blablabla
{
    private static string __hack = typeof(SqlProviderServices).ToString();

    // other class members as they were before.
}

これにより、ビルドプロセスがEntityFramework.SqlServer.dllをEFプロジェクトへの参照を持つプロジェクトの\binフォルダーに強制的にコピーします。

ダウンストリームプロジェクトでEF nugetパッケージをインストールしたり、EntityFramework.SqlServer.dllへの明示的な参照を作成する必要はありません。

4
Tohid

Entity Framework nugetをアンインストールして、再インストールするだけでうまくいきました。

3
Moji

私も同様の問題がありました

私の問題は次のことで解決しました:

enter image description here

enter image description here

1
BehrouzMoslem

別の同様の質問に対する私の答え で提案したように、binフォルダーを削除し、ソリューションをクリーン/リビルドします。

0
Ulysses Alves