2010-06-28 14 views
5

--- edit --- Czy są jakieś dodatkowe informacje, które mogę podać, aby pomóc rozwiązać ten problem?Sqlite .NET i Entity Framework - "próba napisania bazy danych tylko do odczytu"

Próbuję uruchomić system Sqlite i Entity Framework w serwisie WWW .NET WCF.

Kiedy próbuję zapisać cokolwiek do bazy danych, Otrzymuję komunikat "próba napisania bazy danych tylko do odczytu". Poniżej znajduje się pełna informacja o błędzie:

System.Data.EntityException: Błąd wystąpił podczas uruchamiania transakcji na połączenia operatora. Zobacz wewnętrzny wyjątek, aby poznać szczegóły.

---> System.Data.SQLite.SQLiteException: próba napisania readOnly baza danych,

próba zapisu tylko do odczytu bazy danych
na System.Data.SQLite.SQLite3.Reset (SQLiteStatement stmt)
w [wycinku] ......................................... ...............> w System.Data.EntityClient.EntityConnection.BeginDbTransaction (IsolationLevel isolationLevel) pod adresem System.Data.Common.DbConnection.BeginTransaction() pod adresem System.Data.EntityClient.EntityConnection.BeginTransaction() na System.Data.Objects.ObjectContext.SaveChanges (Boolean acceptChangesDuringSave) w System.Data.Objects.ObjectContext.SaveChanges() na ...

Oto moja konfiguracja EF wewnątrz Web.config (z przerwami liniowych dla łatwiejszego odczytu):

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

Dlaczego otrzymuję ten błąd? Dlaczego baza danych jest tylko do odczytu?

Niektóre rzeczy próbowałem:

  • zapewniła katalog i plik jest zapisu stanie przez usługę internetową. (Mam wypróbowane pisania plików tekstowych do samym katalogu, w teście).

  • Dodałem „tylko do odczytu = False” do ciąg połączenia.

+1

Czy użytkownik, z którym chcesz się połączyć, ma uprawnienia do zapisu w bazie danych? Czy można połączyć się i pisać w bazie danych za pomocą Management Studio (lub odpowiednika)? – ChrisF

+0

Hmmm. Nie określam żadnych poświadczeń - nie określono uwierzytelniania systemu Windows ani autoryzacji formularza. Mogę oczywiście podłączyć i zapisać do bazy danych na mojej maszynie lokalnej. Spróbuję połączyć się z serwerem sieciowym. –

+0

Z mojego rozumienia, Sqlite nie ma uwierzytelniania Windows ani uwierzytelniania formularzy. To tylko pojedyncza baza danych, żadnych usług, bez uwierzytelniania. Czy się mylę? –

Odpowiedz

3

Okazało się, że problemem były ustawienia zabezpieczeń IIS. Musiałem włączyć dostęp do zapisu skryptów i magicznie zaczęło działać.

+0

Wpadłem na ten sam problem.Gdzie włączasz "dostęp do zapisu skryptu"? Zajrzałem do obsługi, ale mogę wybrać pomiędzy "pisać" i "skrypt", ale nie oba (przyciski radiowe). –

+1

Wymyśliłem to. Jest to uprawnienie do zapisu na poziomie systemu Windows w systemie plików dla użytkownika IIS (IIS_IUSRS), które w moim przypadku można skonfigurować za pośrednictwem hostów "WebsitePanel". Może to może być również skonfigurowane przez FTP (chmod), ale nie próbowałem tego. –

Powiązane problemy