0

クライアントに配布する準備がほぼ整ったアプリケーションを作成しました。数ヶ月かかりました。すべてが正常に機能しましたが、VS2012 をインストールすると、すべてのテストが機能しなくなりました。私はすべてを試しましたが、最終的にあきらめて、コンピューター全体を再インストールしました。

以前と同じセットアップですが、すべてクリーン: Windows 7 64 ビット、VS2012、SQL2012 など。すべてのテストが正常に機能したので、満足しています。しかし、今、私は新たな問題に遭遇しました。SqlCe 4.0 をターゲットにしている場合は機能しません。私のアプリケーションは、WinApi を介して中央の SQL Server と同期します。その部分は問題ありませんでしたが、SqlCe 4.0 のローカル データベースは機能しません。何が問題ですか?新品のきれいなパソコンです!

基本的なセットアップで新しいソリューションを作成しました.NugetはSqlCe Compact、Entity Framework 5をインストールし、コードを最初に、1つのクラス、1つのコンテキストを使用しました。それは動作しません!データベースへの最初のコンテキスト呼び出しでスタックし、データベース ファイルが生成されません。例外ではありません。

何が起こっている?SqlCe は信頼できませんか? SQLite に切り替える必要がありますか? 問題は、私にはたくさんのコードがあり、EF に非常に慣れていることです。

4

2 に答える 2

2

NuGet パッケージをインストールしても、machine.config には何も登録されません。独自の構成ファイルでプロバイダーを削除または追加するか、ユーザーのコンピューターに 4.0 MSI ファイルをインストールする必要があります。EF サンプルは、MSI がインストールされていることを常に前提としています。

構成エントリの例:

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

私はここにプライベートディプライメントに関するブログ投稿を持っています: http://erikej.blogspot.dk/2011/02/using-sql-server-compact-40-with.html

于 2013-04-21T07:35:08.560 に答える
0

私の場合と完全に一致する答えが見つからずに検索しました。しかし、machine.config ファイルの不正な形式のタグについて言及しているブログでアイデアが浮かびました。それを調べたとき、私はこの非常に重要なセクションを見つけました:

  <system.data>
    <DbProviderFactories>
      <add name="Odbc Data Provider" invariant="System.Data.Odbc" description=".Net Framework Data Provider for Odbc" type="System.Data.Odbc.OdbcFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
      <add name="OleDb Data Provider" invariant="System.Data.OleDb" description=".Net Framework Data Provider for OleDb" type="System.Data.OleDb.OleDbFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
      <add name="OracleClient Data Provider" invariant="System.Data.OracleClient" description=".Net Framework Data Provider for Oracle" type="System.Data.OracleClient.OracleClientFactory, System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
      <add name="SqlClient Data Provider" invariant="System.Data.SqlClient" description=".Net Framework Data Provider for SqlServer" type="System.Data.SqlClient.SqlClientFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
      <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"/>
      <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"/>
    </DbProviderFactories>
  </system.data>

私の machine.config ファイルでは、セクション DbProviderFactories が空でした。追加しようとしましたが、何らかのアプリケーションによってロックされていたため、追加できませんでした。一方、私の顧客も同じ問題に遭遇する可能性があり、machine.config を編集してもらうのは困難です。だから私はそれを簡単な方法で行いました:私のアプリケーション設定ファイルにセクションを追加しました! 出来上がり!すべてが正常に戻りました。私のアプリケーションは再び美しく動作します。

しかし、以前の Windows インストールで機能したのはなぜですか? このセクションが常に machine.config に追加されないのはなぜですか? EntityFramework 5.0 と組み合わせた SqlCe 4.0 のデモ サンプルで、DbProviderFactories が前提条件として言及されていないのはなぜですか? これは .Net Framework 4.5 の問題でしょうか?

于 2013-04-20T21:37:22.753 に答える