2

Entity Framework 4 と SQL Server CE データベース 3.5 を使用して WPF アプリケーションを開発していますが、正しく動作しています。

SQL Server Compact 3.5ただし、.Net Framework 4 がインストールされているがドライバーがインストールされていないマシンでこのアプリケーションを実行したいと考えています。そして、インストーラーはありません。出来ますか?

私は次のことを試しました:

  1. 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=&quot;Data Source=|DataDirectory|\Data\Database1.sdf&quot;" 
               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>
    
  2. への参照を追加しSystem.Data.SqlServerCeSystem.Data.SqlServerCe.Entityローカル コピーを許可する

  3. アプリケーションをビルドし、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 です。

4

2 に答える 2

2

3.5 SP2 をインストールし、app.config を次のように変更します。

<?xml version="1.0"?>
<configuration>
  <connectionStrings>
    <add name="ChinookEntities" connectionString="metadata=res://*/Chinook.csdl|res://*/Chinook.ssdl|res://*/Chinook.msl;provider=System.Data.SqlServerCe.3.5;provider connection string=&quot;Data Source=C:\Users\erik.COMMENTOR\Documents\Visual Studio 2010\Projects\SqlCeTest\Chinook.sdf&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
  <system.data>
    <DbProviderFactories>
      <remove invariant="System.Data.SqlServerCe.3.5" />
      <add name="Microsoft SQL Server Compact Data Provider 3.5" 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.1.50, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    </DbProviderFactories>
  </system.data>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly xmlns="">
        <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>
</configuration>

C:\Program Files (x86)\Microsoft SQL Server Compact Edition\v3.5\Private フォルダーの System.Data.SqlServerCe.dll および System.Data.SqlServerCe.Entity.dll を必ず使用してください。

于 2012-04-25T12:12:16.673 に答える
0

SQL CE 3.5 をあきらめて 4.0 に切り替えました。この記事のおかげで、うまく機能しています。ありがとうエリック;)

于 2012-04-27T14:58:43.877 に答える