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>
ビルドフォルダーには、次のファイルが含まれています(もちろん、アプリケーション固有のファイルに加えて)。
AMD64およびx86サブフォルダーのそれぞれには、次のファイルがあります。
SQL Server CEがインストールされているため、プログラムは開発マシンで実行されると確信していますが、他のマシンでローカルのSQL Server CE dllのみを使用してプログラムを実行するにはどうすればよいですか?
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>
今日も同じ問題に直面していました。
EFを数回再インストールした後、私の問題を解決したのは、DALプロジェクト(実際にEFを使用するプロジェクト)と一緒にコンソールプロジェクトでEFを参照することでした。
EFを参照する参照を使用している場合は、それをこのプロジェクトにも追加する必要があります。
応答が遅れて申し訳ありません-実際には、本当に簡単な解決策があります:
Packages\EntityFramework.6.1.3\lib\net45フォルダーを調べると、すでにそこにあります-EntityFramework.SqlServerである別のdllがあることがわかります。
それへの参照を追加するだけで、すべてが機能します。
私は同じ問題を抱えていましたが、何もうまくいきませんでした。この問題を解決したのは、(プログラムの追加/削除を介して)マシンからSQL Server Compactをアンインストールして再インストールすることだけでした。
私の場合、「EntityFramework.SqlServerCompact」パッケージがありませんでした。誰かの日を救うことができるかどうかを共有したかっただけです!