2012-01-26 28 views
3

.NET 4上でWindowsアプリケーションを開発していますが、.NETラッパーSystem.Data.SQLiteとEntity FrameworkでSQLiteデータベースを使用しています。デプロイメントマシンでは、.NET 4 Client Profileが必要です。SQLiteラッパー1.0.77と.NET Framework 4のEntity Framework

SQLiteラッパーの最新の正式リリース(1.0.66)は2歳です。このバージョンは.NET 2.0〜3.5で動作します。つまり、ユーザーに2バージョンの.NETをインストールさせる必要があります。また、外部キーもサポートしていません。

外部キーをサポートするunofficial release 1.0.77もありますが、このバージョンではORM(.NET Entity Framework)のサポートが壊れています(System.Data.ProviderIncompatibleExceptionが発生します)。 私はこの問題を修正するには、3つの方法を参照することができます:このラッパーの使用を中止し、他のオプションを探し

  1. を。何をお勧めしますか?
  2. エンティティフレームワークの使用を放棄します。このオプションは、古い学校のやり方であり、たくさんのコードを書き直してコードを書いてバグの可能性を高める必要があるため、望ましくないことです。
  3. 1.0.77で問題を修正しようとしましたが、どれくらい時間がかかるかわかりません。あなたはこの状況で何をしますか?他のラッパーを見てください。
+1

次の場合を除いて、すべての設定が完了して私に起こりました:*私は32ビットの 'System.Data.SQLite.dll'を参照していましたが、64ビット構成を構築していました。 –

答えて

3

最後に、私はGACにアセンブリを配置するずに Entity Frameworkのとを動作するように1.0.77 System.Data.SQLiteアセンブリを聞かせする方法を理解します。

System.Data.ProviderIncompatibleException:

私の最初の試みのSQLite 1.0.77を接続するためには、以下のような結果にヌルにSystem.Data」タイプのストアプロバイダインスタンスの「のgetService」メソッドを呼び出した後に返されました.SQLite.SQLiteFactory '。ストアプロバイダーが正しく機能していない可能性があります。

コード分析は、本体がSystem.Data.SQLite.dllSystem.Data.SQLite.Linq.dllを見つけることができないことを私に示しました。 2番目のアセンブリはプロジェクトで参照されており、出力ビンフォルダに存在していました。しかし、エラーは消えていませんでした。 Reflectorによると、System.Data.SQLite.Linq.dllにはパブリッククラスがありません。したがって、それを参照するコードがないため、アプリケーションドメインに自動的にロードされることはありません。したがって、正しい作業のためにはGACのみでなければなりません。 しかし、手動でアプリドメインに読み込むことはできません。たとえば、アプリケーションの開始時:

Assembly.Load("System.Data.SQLite.Linq"); 

それだけです!

また、アプリケーションの設定には、この行を追加することを忘れないでください:

<system.data> 
    <DbProviderFactories> 
     <remove invariant="System.Data.SQLite"/> 
     <add name="SQLite Data Provider" invariant="System.Data.SQLite" 
      description=".Net Framework Data Provider for SQLite" 
      type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite, Version=1.0.77.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139"/> 
    </DbProviderFactories> 
    </system.data> 

は私expierenceが便利になります願っています。

関連する問題