2010-06-28 4 views
5

--- éditer --- Y a-t-il des informations supplémentaires que je peux donner pour aider à résoudre ce problème? J'essaie de démarrer avec un environnement Sqlite et Entity Framework au sein d'un service Web .NET WCF.Sqlite .NET et Entity Framework - "tentative d'écriture d'une base de données en lecture seule"

Lorsque j'essaie d'enregistrer n'importe quoi dans la base de données, Je reçois l'erreur "tentative d'écriture d'une base de données en lecture seule". Voici l'intégralité des informations d'erreur:

System.Data.EntityException: Une erreur produite lors du démarrage d'une opération sur la connexion du fournisseur. Voir l'exception interne pour plus de détails.

---> System.Data.SQLite.SQLiteException: Tentative d'écriture d'une base de données en lecture seule

Tentative d'écriture d'une base de données en lecture seule
à System.Data.SQLite.SQLite3.Reset (SQLiteStatement stmt)
à [snip] ......................................... ...............> à System.Data.EntityClient.EntityConnection.BeginDbTransaction (IsolationLevel isolationLevel) à System.Data.Common.DbConnection.BeginTransaction() at System.Data.EntityClient.EntityConnection.BeginTransaction() à System.Data.Objects.ObjectContext.SaveChanges (Boolean acceptChangesDuringSave) à System.Data.Objects.ObjectContext.SaveChanges()

à ...

Voilà ma configuration EF à l'intérieur Web.config (avec des sauts de ligne pour faciliter la lecture):

<connectionStrings> 
    <add 
     name="FooEntities" 
     connectionString="metadata=res://*/FooDataModel.csdl| 
     res://*/FooDataModel.ssdl| 
     res://*/FooDataModel.msl; 
     provider=System.Data.SQLite; 
     provider connection string='data source=C:\domains\myfoosite.com\wwwroot\FooService\Foo.sqlite'" 
     providerName="System.Data.EntityClient" /> 
<connectionStrings> 

Pourquoi est-ce que je reçois cette erreur? Pourquoi la base de données est-elle en lecture seule?

Certaines choses que j'ai essayé:

  • le répertoire et Veillé fichier est écriture capable par le service Web. (Je l'ai essayé d'écrire des fichiers texte au même répertoire comme un test.)

  • J'ai ajouté le « read only = False » à la chaîne de connexion.

+1

L'utilisateur que vous utilisez pour vous connecter a-t-il un accès en écriture à la base de données? Pouvez-vous vous connecter et écrire dans la base de données à l'aide de Management Studio (ou équivalent)? – ChrisF

+0

Hmmm. Je ne spécifie aucune information d'identification d'aucune sorte - ne spécifie pas l'authentification Windows ou l'authentification Forms. Je peux me connecter et écrire sur la base de données sur ma machine locale, bien sûr. Je vais essayer de me connecter sur le serveur web. –

+0

D'après ce que je comprends, Sqlite n'a pas d'authentification Windows ou d'authentification Forms. C'est juste une base de données à un seul fichier, pas de services, pas d'authentification. Est-ce que je me trompe? –

Répondre

3

Il s'avère que le problème était les paramètres de sécurité IIS. J'ai dû activer l'accès en écriture au script, et par magie, il a commencé à fonctionner.

+0

J'ai rencontré le même problème.Où avez-vous activé l'accès en écriture de script? J'ai regardé dans les gestionnaires, mais là je peux choisir entre "écrire" et "script", mais pas les deux (boutons radio). –

+1

Je l'ai compris. C'est l'autorisation d'écriture au niveau Windows sur le système de fichiers pour l'utilisateur IIS (IIS_IUSRS) qui dans mon cas pourrait être configuré via les hôtes "WebsitePanel". Peut-être qu'il peut également être configuré via FTP (chmod) mais je n'ai pas essayé cela. –

Questions connexes