20

SQL Compact を使用したデスクトップ アプリケーションで Entity Framework 4 を使用しています。アプリケーションで SQL Compact のプライベート インストールを使用して、インストーラーがユーザーに 2 回目のインストールを行わずに SQL Compact をインストールできるようにしたいと考えています。また、今後のバージョン管理の手間も省けます。

私の開発マシンには SQL Compact 3.5 SP1 がパブリック インストールとしてインストールされているため、期待どおりにアプリが正常に動作します。しかし、SQL Compact がインストールされていないテスト マシンでは実行されません。次のエラーが表示されます。

The specified store provider cannot be found in the configuration, or is not valid.

一部の人々が SQL Compact のプライベート インストールに問題を抱えていることは知っていますが、私はそれらをしばらく使用しており、非常に気に入っています。残念ながら、私の通常のプライベート インストール アプローチはうまくいきません。SQL CE ファイルのバージョン番号を確認したところ、すべて 3.8.8078.0 で、これは SP2 RC バージョンです。

プライベート インストールに含めたファイルは次のとおりです。

  • sqlcecompact35.dll
  • sqlceer35EN.dll
  • sqlceme35.dll
  • sqlceqp35.dll
  • sqlcese35.dll
  • System.Data.SqlServerCe.dll
  • System.Data.SqlServerCe.Entity.dll

System.Data.SqlServerCe への参照をプロジェクトに追加し、上記のすべてのファイルがインストール コンピューターのアプリケーション フォルダーにコピーされていることを確認しました。

SQL Compact ファイルを開くときに EntityConnectionStringBuilder を構成するために使用するコードを次に示します。

var sqlCompactConnectionString = string.Format("Data Source={0}", filePath);

// Set Builder properties
builder.Metadata = string.Format("res://*/{0}.csdl|res://*/{0}.ssdl|res://*/{0}.msl", edmName);
builder.Provider = "System.Data.SqlServerCe.3.5";
builder.ProviderConnectionString = sqlCompactConnectionString;
var edmConnectionString = builder.ToString();

ファイルがありませんか?SQL Compact DLL の場所を Entity Framework に伝えるために必要な構成手順がありませんか? インストール マシンで EF が SQL Compact DLL を見つけられないその他の提案はありますか? ご協力いただきありがとうございます。

4

5 に答える 5

37

Steve Lasker によるブログ投稿のおかげで、その方法がわかりました。基本的に、ここにあなたがしなければならないことがあります:

(1)System.Data.SqlServerCe.dllプロジェクトに への参照を設定します。CopyLocalプロパティを True に設定します。

(2) プロジェクトの App.config で、次の XML マークアップを追加します。EntityFramework に、SQL Compact のプライベート インストールを参照してデータ プロバイダーを探すように指示します。

<system.data>
    <DbProviderFactories>
        <remove invariant="System.Data.SqlServerCe.3.5"/>
        <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.1.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
    </DbProviderFactories>
</system.data>

(3) Setup プロジェクトで、ファイル システム エディターのアプリケーション フォルダーに次のファイルを追加します。

  • sqlcecompact35.dll
  • sqlceme35.dll
  • sqlcese35.dll
  • System.Data.SqlServerCe.Entity.dll
于 2010-03-30T00:02:09.160 に答える
22

念のため、SQL CE 4では、web.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.1, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    </DbProviderFactories>
  </system.data>

プライベート展開の場合はVersion= 4.0.0.1 一般展開の場合はVersion= 4.0.0.0 。

于 2011-02-17T02:04:10.860 に答える
2

あなたのヒントをありがとう - 私を大いに助けてくれました。SQL Server Compact チームのブログに、Sql Server Compact 3.5 SP2 リリースに関する追加情報を追加した投稿があります。

SQL Server Compact のプライベート展開にしばらく苦労した後、いくつかの追加要件を見つけました。

いくつかの異なるシステムでアプリを試してみたところ、一部のシステムでアプリが正しく動作しないことがわかりました。

例: これを試してください:

-winxp sp3 のクリーン インストールをセットアップしました

-拡張された.net Framework 4.0をインストール

-アプリを新しいインストールに展開しました(/SQLサーバーコンパクトチームのブログ投稿に記載されているすべての必要なdllと微調整を含みます)

そのため、いくつかの調査の結果、.net Framework 4 のインストールに加えて、.net Framework 2 もインストールする必要があり、正常に機能することがわかりました。

ここに私の質問があります。.net Framework 4 に含まれていない SQL Server コンパクト エディションで使用されるコンポーネントはどれですか?

セットアップをオーバーロードしたり、2 つのフレームワークをブートストラッパーにチェーンしたりしたくありません...誰か良いヒントを知っていますか?

SQL Server Compact チームに感謝します。

SQL Server Compact v3.5 は、'Visual C++ ランタイム 2005 (または 8.0)' (CRT80 とも呼ばれます) に依存しています。CRT80 モジュールを MSI にパッケージ化します。プライベート展開の場合、

この依存関係に注意する必要があります。.NET FX v2.0 は CRT80 モジュールもパッケージ化してインストールするため、システム上の .NET FX v2.0 で自動的に機能します。

ありがとう

于 2010-06-24T08:09:39.013 に答える
1

これは私のために働いたものです:

dotNet バージョン 2.0 および 4.0 用の machine.config ファイルがあります。

ドットネット 2.0

C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config
ドットネット 4.0
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config

バージョン 2.0 のファイルを開くと、おそらく次のような <system.data> ノードがあることがわかります。

<system.data>
    <DbProviderFactories>
        <add name="Odbc Data Provider" ... stuff here ... />
        <add name="OracleClient Data Provider" ... stuff here ...>
        ... more lines similar to the one above ...
        <add name="Microsoft SQL Server Compact Data Provider" Invariant="System.Data.SqlServerCe.3.5" ...>
    </DbProviderFactories>
</system.data>

一方、dotNet 4.0 用のものを開くと、かなり惨めなように見えます。

<system.data>
    <DbProviderFactories>        
    </DbProviderFactories>
</system.data>

または、 <system.data> ノードさえまったくないかもしれません!!! いずれの場合も、<system.data> ノード全体を v2 の machine.config ファイルから v4 のファイルにコピーするだけです。

サイドノート

v4 machine.config の編集の保存に問題がある場合は、管理モードで実行するために、エディターの起動アイコンをクリックするときに数回右クリックする必要がある場合があります。

于 2011-11-10T19:01:45.137 に答える