web-dev-qa-db-ja.com

ローカルSQLServer CEDLLを使用したエンティティフレームワークコードの最初の「ADO.NETプロバイダーが見つかりません」

SQL Server CE 4.0ファイルを使用するC#アプリケーションを作成しています。このファイルには、コードファーストを介してEntity Framework6.0からアクセスします。 (アプリケーションは、SQL Server CE接続にローカルdllを使用できる必要があります。つまり、アプリケーションはXCOPY展開可能である必要があります)。アプリケーションは私の開発マシンでは正常に動作しますが、他のマシン(Win7と.NET 4.0のみを搭載したVMなど)では、ArgumentExceptionを取得します。

不変の名前 'System.Data.SqlServerCe.4.0'のADO.NETプロバイダーが、マシンまたはアプリケーションの構成ファイルに登録されていないか、ロードできませんでした。詳細については、内部例外を参照してください。

内部例外メッセージは次のように述べています。

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

私はGoogleを検索し、SOで、ほとんどのコメントはApp.configファイルが正しいことを確認していることを示しています。私のものは(デフォルトの接続ファクトリとプロバイダーセクション)だと思いますが、内容は次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
  </startup>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="System.Data.SqlServerCe.4.0" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
      <provider invariantName="System.Data.SqlServerCe.4.0" type="System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact" />
    </providers>
  </entityFramework>
</configuration>

ビルドフォルダーには、次のファイルが含まれています(もちろん、アプリケーション固有のファイルに加えて)。

  • EntityFramework.dll
  • EntityFramework.xml
  • EntityFramework.SqlServer.dll
  • EntityFramework.SqlServer.xml
  • EntityFramework.SqlServerCompact.dll
  • EntityFramework.SqlServerCompact.xml

AMD64およびx86サブフォルダーのそれぞれには、次のファイルがあります。

  • sqlceca40.dll
  • sqlcecompact40.dll
  • sqlceer40EN.dll
  • sqlceme40.dll
  • sqlceqp40.dll
  • sqlcese40.dll

SQL Server CEがインストールされているため、プログラムは開発マシンで実行されると確信していますが、他のマシンでローカルのSQL Server CE dllのみを使用してプログラムを実行するにはどうすればよいですか?

9
Tim

http://tech.aendeavors.com/2011/06/09/bin-deploy-sqlce-4-0-and-ef-4-1/ を参照してください。

欠落している可能性のある関連ビットは次のとおりです。

  • System.Data.SqlServerCeが参照され、プロパティで「ローカルコピー」に設定されていることを確認してください。

  • 以下をapp.configに追加します。


<system.data>
    <DbProviderFactories>
      <remove invariant="System.Data.SqlServerCe.4.0" />
      <add name="Microsoft SQL Server Compact Data Provider 4.0"
           invariant="System.Data.SqlServerCe.4.0"
           description=".NET Framework Data Provider for Microsoft SQL Server Compact"
           type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
    </DbProviderFactories>
</system.data>
22
nekno

今日も同じ問題に直面していました。
EFを数回再インストールした後、私の問題を解決したのは、DALプロジェクト(実際にEFを使用するプロジェクト)と一緒にコンソールプロジェクトでEFを参照することでした。

EFを参照する参照を使用している場合は、それをこのプロジェクトにも追加する必要があります。

5
Tico

応答が遅れて申し訳ありません-実際には、本当に簡単な解決策があります:

Packages\EntityFramework.6.1.3\lib\net45フォルダーを調べると、すでにそこにあります-EntityFramework.SqlServerである別のdllがあることがわかります。

それへの参照を追加するだけで、すべてが機能します。

2
Sahil Talwar

私は同じ問題を抱えていましたが、何もうまくいきませんでした。この問題を解決したのは、(プログラムの追加/削除を介して)マシンからSQL Server Compactをアンインストールして再インストールすることだけでした。

0
dmathisen

私の場合、「EntityFramework.SqlServerCompact」パッケージがありませんでした。誰かの日を救うことができるかどうかを共有したかっただけです!

0
Prateek Pandey