2012-04-24 17 views
2

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

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

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

  1. System.Data.SqlServerCeSystem.Data.SqlServerCe.Entityへの参照を追加し、ローカルコピー

  2. が構築できるよう

    <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> 
    
  3. のapp.configにセクションを作成しますSQL Server CEドライバがインストールされていないマシンにコピーします。それはデータコンテキストを作成するために来るとき、私はこのエラーを取得しておいてください。

System.ArgumentExceptionの:指定されたストアプロバイダがコンフィグレーションでは見られない、または有効ではありませんすることができます。 --->
System.ArgumentException:要求された.Net Frameworkデータプロバイダを見つけることができません。インストールされていない可能性があります。

私は時間を失っていますか?または、SQLiteに切り替えるだけでいいですか?

ありがとうございます!

EDIT:josemiguel.torres'答えに

おかげで、私はこれを達成する方法をdetailling this postでご確認ください。しかし、私はまだアセンブリエラーがあります。

"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)" 

この問題を解決する方法については、this other postをご覧ください。 |:

<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'

私は外によ溶液。誰でも?

EDIT 2:

1.Iは、私のマシンからすべてのMicrosoft "SQL ServerのCompact Editionの" バージョンをアンインストールしました。

2. machine.configのバージョンを確認しました.DbProviderFactoriesセクションにエントリがありません。

3。私は012 SPから3.5 SP2ドライバをダウンロードし、x86パッケージをインストールしました。

4.Iは私の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.0.0と3.5.1.50ではないです?

justeの場合:my devマシンはWin7 x64上にあり、ターゲットマシンはWinXP x86です。

+1

この投稿を確認http://blogs.msdn.com/b/stevelasker/archive/2008/10/22/privately-deploying-sql-server-compact-with-the-ado-net -entity-provider.aspx –

+0

しかし、私はまだアセンブリエラーがあります。 – JackoBongo

+0

プロジェクトのプラットフォームが「x86」に設定されていることを確認します。この問題はあなたのapp.configから来る可能性があります。接続文字列を確認してください。 –

答えて

0

私はSQL CE 3.5をあきらめて4.0に切り替えました。 this articleのおかげでうまくいきました。 ありがとうエリック;)

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からSystem.Data.SqlServerCe.dllとSystem.Data.SqlServerCe.Entity.dllを使用してください: \ Program Files(x86)\ Microsoft SQL Server Compact Edition \ v3.5 \プライベートフォルダ

+0

何らかの理由で、SP2をインストールした後にDbProviderFactoriesのバージョンが一致しません。編集2を参照してください。 – JackoBongo

+0

私はプライベートサブフォルダのファイルを使用しています – JackoBongo

+0

machine.configの3.5.1.0である必要があります。また、SP2とx86の両方のランタイムをインストールしてください(非常に重要) – ErikEJ

関連する問題