Entity Framework 4 と SQL Server CE データベース 3.5 を使用して WPF アプリケーションを開発していますが、正しく動作しています。
SQL Server Compact 3.5
ただし、.Net Framework 4 がインストールされているがドライバーがインストールされていないマシンでこのアプリケーションを実行したいと考えています。そして、インストーラーはありません。出来ますか?
私は次のことを試しました:
app.config にセクションを作成します
<configuration> <connectionStrings> <add name="DbEntities" connectionString="metadata=res://*/Model.Model1.csdl|res://*/Model.Model1.ssdl|res://*/Model.Model1.msl;provider=System.Data.SqlServerCe.3.5;provider connection string="Data Source=|DataDirectory|\Data\Database1.sdf"" providerName="System.Data.EntityClient"/> </connectionStrings> <system.data> <DbProviderFactories> <add name="SQL Server Compact Edition Data Provider" invariant="System.Data.SqlServerCe" description=".NET Framework Data Provider for Microsoft SQL Server Compact Edition" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=9.0.242.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/> </DbProviderFactories> </system.data> </configuration>
への参照を追加し
System.Data.SqlServerCe
、System.Data.SqlServerCe.Entity
ローカル コピーを許可するアプリケーションをビルドし、SQL Server CE ドライバーがインストールされていないコンピューターにコピーします。データコンテキストの作成に関しては、このエラーが発生し続けます:
System.ArgumentException: 指定されたストア プロバイダーが構成内に見つからないか、有効ではありません。--->
System.ArgumentException: 要求された .Net Framework データ プロバイダーが見つかりません。インストールされていない可能性があります。
私は時間を失っていますか?それとも、SQLite に切り替える必要がありますか?
ありがとう!
編集:
josemiguel.torres の回答のおかげで、これを達成する方法を詳しく説明したこの投稿を確認します。ただし、まだアセンブリ エラーがあります。
"System.IO.FileLoadException: Could not load file or assembly 'System.Data.SqlServerCe, Version=3.5.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference.
(Exception from HRESULT: 0x80131040)"
そこで、この問題を解決する方法を説明するこの他の投稿を見ました。いくつかのアセンブリ バインディングを追加した後:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Data.SqlServerCe" publicKeyToken="89845dcd8080cc91" culture="neutral"/>
<bindingRedirect oldVersion="3.5.1.0-3.5.1.50" newVersion="3.5.1.50"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
それでもうまくいきません... :| エラーメッセージは似ています:
System.IO.FileLoadException: Could not load file or assembly 'System.Data.SqlServerCe, Version=3.5.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
ファイル名: 'System.Data.SqlServerCe、バージョン = 3.5.0.0、カルチャ = ニュートラル、PublicKeyToken = 89845dcd8080cc91'
私は解決策がありません。誰?
編集2:
1. マシンからすべての Microsoft "SQL Server Compact Edition" バージョンをアンインストールしました。
2.machine.config のバージョンを確認しました。DbProviderFactories セクションにエントリがありません。
3.そこから 3.5 SP2 ドライバーをダウンロードし、x86 パッケージをインストールしました。
4.自分の machine.config (v4 x86) を確認すると、DbProviderFactories ノードの下に次のエントリが作成されています。
<add name="Microsoft SQL Server Compact Data Provider" invariant="System.Data.SqlServerCe.3.5" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=3.5.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
なぜ 3.5.1.50 ではなく 3.5.0.0 なのか???
念のため: 私の開発マシンは Win7 x64 上にあり、ターゲット マシンは WinXP x86 です。