2010-06-28 11 views
5

--- modifica --- Sono disponibili informazioni aggiuntive per risolvere questo problema?Sqlite .NET e Entity Framework: "tenta di scrivere un database di sola lettura"

Sto provando ad essere installato e funzionante con un Sqlite ed Entity Framework all'interno di un servizio Web WCF .NET.

Quando si tenta di salvare qualcosa nel database, Viene visualizzato l'errore "tentativo di scrivere un database di sola lettura". Ecco le informazioni di errore completo:

System.Data.EntityException: Un errore è verificato durante l'avvio di una transazione sulla connessione provider. Vedi l'eccezione interna per i dettagli.

---> System.Data.SQLite.SQLiteException: Tentativo di scrivere un database di sola lettura

Tentativo di scrivere un database di sola lettura
a System.Data.SQLite.SQLite3.Reset (SQLiteStatement stmt)
presso [snip] ......................................... ...............> a System.Data.EntityClient.EntityConnection.BeginDbTransaction (IsolationLevel isolationLevel) a System.Data.Common.DbConnection.BeginTransaction() a System.Data.EntityClient.EntityConnection.BeginTransaction() a System.Data.Objects.ObjectContext.SaveChanges (booleano acceptChangesDuringSave) a System.Data.Objects.ObjectContext.SaveChanges() a ...

Ecco la mia configurazione EF all'interno web.config (con interruzioni di riga per una più facile lettura):

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

Perché si riceve questo errore? Perché il database è di sola lettura?

Alcune cose che ho provato:

  • garantito la directory e il file è write-grado dal servizio web. (Ho provato a scrivere i file di testo al stessa directory di un test.)

  • ho aggiunto l 'unica = False leggere' per la stringa di connessione.

+1

L'utente che si sta utilizzando per connettersi ha accesso in scrittura al database? Riesci a connetterti e scrivere al database usando Management Studio (o equivalente)? – ChrisF

+0

Hmmm. Non sto specificando credenziali di alcun tipo - non ho specificato l'autenticazione di Windows o l'autenticazione di moduli. Posso connettermi e scrivere sul database sul mio computer locale, ovviamente. Proverò a connettermi sul server web. –

+0

Dalla mia comprensione, Sqlite non ha l'autenticazione di Windows o dei moduli. È solo un database a file singolo, nessun servizio, nessuna autenticazione. Mi sbaglio? –

risposta

3

Risulta il problema erano le impostazioni di sicurezza IIS. Ho dovuto attivare l'accesso in scrittura di script e magicamente ha iniziato a funzionare.

+0

Ho incontrato lo stesso problema.Dove hai attivato "accesso in scrittura script"? Ho guardato i gestori, ma lì posso scegliere tra "scrivere" e "script", ma non entrambi (pulsanti di opzione). –

+1

L'ho capito. È il permesso di scrittura a livello di Windows sul file system per l'utente IIS (IIS_IUSRS) che nel mio caso potrebbe essere configurato tramite gli host "WebsitePanel". Forse può anche essere configurato via FTP (chmod) ma non l'ho provato. –

Problemi correlati