2010-06-28 54 views
5

---編輯---有沒有任何額外的信息可以幫助解決這個問題?Sqlite .NET和實體框架 - 「試圖寫一個只讀數據庫」

我想在.NET WCF Web服務中啓動並運行Sqlite和Entity Framework。

當我嘗試將任何內容保存到數據庫時,我收到錯誤「嘗試寫入只讀數據庫」。下面是完整的錯誤信息:

System.Data.EntityException:當供應商連接上開始交易 錯誤 發生。詳情請參閱內部例外。

---> System.Data.SQLite.SQLiteException: 嘗試寫入只讀數據庫

嘗試寫入只讀數據庫
在 System.Data.SQLite.SQLite3.Reset(SQLiteStatement stmt)
at [snip] ......................................... ...............> at System.Data.EntityClient.EntityConnection.BeginDbTransaction(IsolationLevel isolationLevel)at System.Data.Common.DbConnection.BeginTransaction() at System.Data.EntityClient.EntityConnection.BeginTransaction() 在 System.Data.Objects.ObjectContext.SaveChanges(布爾 acceptChangesDuringSave)在 System.Data.Objects.ObjectContext.SaveChanges() 在...

這裏是我的EF裏面配置的Web.config(換行,方便閱讀):

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

我爲什麼會收到這個錯誤?爲什麼數據庫是隻讀的?

有些事情我已經試過:

  • 保證了目錄和文件是 寫能夠通過Web服務。 (我 試着寫純文本文件到 相同的目錄中進行測試。)

  • 我已經添加了「只讀=假」到 連接字符串。

+1

您用來連接的用戶是否有寫入數據庫的權限?您是否可以使用Management Studio(或同等產品)連接並寫入數據庫? – ChrisF 2010-06-28 13:48:34

+0

嗯。我沒有指定任何類型的憑據 - 未指定Windows身份驗證或表單身份驗證。當然,我可以連接並寫入本地計算機上的數據庫。我會嘗試在Web服務器上連接。 – 2010-06-28 13:57:36

+0

從我的理解,Sqlite沒有Windows身份驗證或表單身份驗證。它只是一個單一文件數據庫,沒有服務,沒有身份驗證。我錯了嗎? – 2010-06-28 18:40:33

回答

3

原來的問題是IIS安全設置。我不得不打開腳本寫入權限,神奇地它開始工作。

+0

我遇到了同樣的問題。你在哪裏開啓了「腳本寫入權限」?我查看了處理程序,但是我可以在「寫入」和「腳本」之間進行選擇,但不能同時選擇(單選按鈕)。 – 2012-06-04 18:33:19

+1

我想通了。它是IIS用戶(IIS_IUSRS)在文件系統上的Windows級寫入權限,在我的情況下可以通過主機「WebsitePanel」進行配置。也許它也可以通過FTP(chmod)進行配置,但我沒有嘗試過。 – 2012-06-04 19:39:25