Entity Framework + SQLiteのデプロイ

asp.net-mvc entity-framework sqlite system.data.sqlite

質問

私はEntity Frameworkを通じてSQLiteデータベースを使用しているASP.NET MVCアプリを持っています。すべてがVS 2008のローカル開発ウェブサーバーで動作します。

ただし、Webアプリをサービスプロバイダにデプロイすると、このエラーが発生します。

[ArgumentException: Unable to find the requested .Net Framework Data Provider.  It may not be installed.]
   System.Data.Common.DbProviderFactories.GetFactory(String providerInvariantName) +1308959
   System.Data.EntityClient.EntityConnection.GetFactory(String providerString) +35

サービスプロバイダは、SQLiteをサポートしていないとコメントしています。 SQLiteはApp_Dataをデプロイ可能なので、サービスプロバイダーの設定には依存しません。

成功したEntity Framework + SQLite展開の経験はありますか?

乾杯、-pom-

人気のある回答

もうこれを読んでいることはないでしょうが、あなたのapp.config(あるいはあなたのためにはweb.config)に次のものが欠けています:

<configuration>
  <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" />
    </DbProviderFactories>
  </system.data>
</configuration>

具体的には、あなたのウェブサイトにリンクされているライブラリでsqliteを使っているのなら、ライブラリではなくウェブサイトの設定ファイルにこれを追加しなければなりませんこれは、プロバイダのロード方法によるものです。基本的に、実行時に "System.Data.SQLite"という文字列を使用してどのDLLをロードするかを決定し、適切なプロバイダを見つけるにはエントリアセンブリの設定を使用します。 。

編集:ところで、あなたがSQLiteの依存関係を持っているライブラリを書いているとき、あなたはこの複雑さを避けることができます。実行時にsqliteを探すためにDbProviderFactoriesを使用する必要はありません。コンパイル時の依存関係も同様に取ることができ、管理が簡単になります。その後、上記のapp.configセクションを無視して、代わりに次のすべてのインスタンスを置き換えることができます。

DbProviderFactories.GetFactory("System.Data.SQLite").CreateConnection()

System.Data.SQLite.SQLiteFactory.Instance.CreateConnection()

その場合は、単純なライブラリ呼び出しを使用して接続を作成しているので、実行時にdbプロバイダを選択することはできません。あなたはもはやconfigファイルを介してデータプロバイダを交換することができないのでそれはより柔軟でないかもしれません、しかし多くのライブラリのためにそれは十分です。残念ながら、ライブラリコードを管理していないのであれば、これは選択肢ではありません。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ