Entity Framework + déploiement de SQLite

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

Question

J'ai une application ASP.NET MVC qui utilise la base de données SQLite via Entity Framework. Tout fonctionne sur le serveur Web de développement local de VS 2008.

Cependant, le déploiement de l'application Web sur mon fournisseur de services provoque l'erreur suivante:

[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

Le fournisseur de services a indiqué qu'il ne supportait pas SQLite. Cependant, SQLite est indépendant des paramètres du fournisseur de service, car il est déployable par App_Data.

Est-ce que quelqu'un a eu l'expérience d'un déploiement réussi de Entity Framework + SQLite?

Cheers, -pom-

Réponse populaire

Il est peu probable que vous lisiez ceci, mais il vous manque le texte suivant dans votre application.config (ou, pour vous, 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>

Plus précisément, si vous utilisez sqlite dans une bibliothèque liée à votre site Web, vous devez l'ajouter au fichier de configuration du site Web - pas à la bibliothèque! Ceci est dû à la façon dont vous chargez le fournisseur: vous déterminez essentiellement au moment de l'exécution quelle dll charger, à l'aide de la chaîne "System.Data.SQLite", et vous recherchez le fournisseur approprié à l'aide des paramètres de l'assembly d'entrée .

Edit: En passant, lorsque vous écrivez la bibliothèque qui a une dépendance à sqlite, vous pouvez éviter cette complexité. Vous n'avez pas besoin d'utiliser DbProviderFactories pour rechercher sqlite au moment de l'exécution. vous pouvez également prendre une dépendance à la compilation, ce qui peut être plus facile à gérer. Ensuite, vous pouvez ignorer la section ci-dessus app.config et remplacer toutes les instances de:

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

avec

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

Si vous le faites, vous utilisez un appel de bibliothèque en clair pour créer la connexion et il n'y a aucune sélection du fournisseur de base de données à l'exécution. Cela peut être moins flexible puisque vous ne pouvez plus échanger de fournisseurs de données via le fichier de configuration, mais cela suffit pour de nombreuses bibliothèques. Malheureusement, si vous ne contrôlez pas le code de la bibliothèque, ce n'est pas une option.



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow