La connexion Entity Framework à la base de données SQLite ne fonctionne pas après le déploiement

.net connection entity-framework web-config

Question

J'ai remplacé l'approche de base de données sqlite par un ensemble de données par une approche utilisant Entity Framework. J'ai créé les entités à l'aide de l'assistant de Visual studio 2008 et la chaîne de connexion a été stockée dans le fichier app.config. Un programme client communique ensuite via WCF avec la base de données. Cela fonctionne bien sur l'ordinateur de développement lorsque j'héberge le service WCF dans une application console. Après avoir hébergé le service dans IIS7 sur l'ordinateur distant, le message d'erreur suivant s'affiche: "Le fournisseur sous-jacent a échoué à l'ouverture". Il est généré la première fois qu'une opération de lecture est tentée à partir de la base de données.

La chaîne de connexion générée automatiquement est la suivante:

     <add name="xPMDbEntities" connectionString="metadata=res://*/PM_EDM.csdl|
            res://*/PM_EDM.ssdl|
            res://*/PM_EDM.msl;
            provider=System.Data.SQLite;
            provider connection string=&quot;
            data source=G:\PMPersistence\xPMDb.s3db&quot;"          
            providerName="System.Data.EntityClient" />

(J'ai séparé la chaîne en quelques lignes pour la rendre plus lisible).

Sur le serveur, cela ne fonctionne pas, même si je localise la base de données exactement au même emplacement que sur l'ordinateur de développement. Est-ce que quelque chose du reste de la chaîne de connexion (dont je ne comprends pas la première chose) doit aussi être édité? Un lien vers une bonne ressource sur la façon de construire des chaînes de connexion EF serait également très utile!

EDIT: J'ai également ajouté la section ci-dessous au fichier web.config:

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

Cela semble fonctionner (Thomas suggère qu'il se trouve dans le fichier machine.config) car avant d'ajouter cette entrée, une erreur s'est produite indiquant que System.Data.SQLite était introuvable.

EDIT2: J'ai installé la DLL System.Data.SQLite sur le serveur plutôt que de copier simplement la DLL dans le répertoire BIN. Le fichier machine.config dans les dossiers Framework / Config et Framework64 / Config a maintenant l'entrée DbFactory ci-dessus. Cela ne fait pas de différence (sauf si je dois redémarrer le serveur ??)

Réponse acceptée

La chaîne de connexion était en effet OK. Le problème était que vous deviez déployer les fichiers system.data.sqlite.dll et system.data.sqlite.linq.dll dans le dossier Bin du service Web qui héberge la connexion à la base de données.


Réponse populaire

Votre chaîne de connexion me semble correcte. Êtes-vous sûr que le fournisseur SQLite ADO.NET est correctement installé sur le serveur? Ouvrez votre fichier machine.config et vérifiez s’il existe une entrée pour System.Data.SQLite dans la section DbProviderFactories.

Un lien vers une bonne ressource sur la façon de construire des chaînes de connexion EF serait également très utile!

En gros, vous devez spécifier: - les métadonnées du modèle (les parties avec "res: // ...") - le fournisseur de magasin ("System.Data.SQLite" dans votre cas) - la chaîne de connexion au magasin, qui varie sur quel fournisseur utilisez-vous

Le moyen le plus simple de construire une chaîne de connexion de manière dynamique consiste à utiliser la classe EntityConnectionStringBuilder , ainsi que le générateur de chaîne de connexion de votre fournisseur de magasin.



Related

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