Sqlite .NET和Entity Framework - "尝试写入只读数据库"

6
---编辑--- 有没有其他信息可以提供,以帮助解决这个问题?
我正在尝试在.NET WCF Web服务中使用Sqlite和Entity Framework。但是,当我尝试将任何内容保存到数据库时,出现了错误“尝试写入只读数据库”。以下是完整的错误信息:
System.Data.EntityException: 在提供程序连接上启动事务时发生错误,请参见内部异常的详细信息。 ---> System.Data.SQLite.SQLiteException: 尝试写入只读数据库 Attempt to write a readonly database at 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() at System.Data.Objects.ObjectContext.SaveChanges(Boolean acceptChangesDuringSave) at System.Data.Objects.ObjectContext.SaveChanges() at ...
下面是我在Web.config中的EF配置(为了更容易阅读,添加了换行符):
<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服务可以将目录和文件写入(我已经尝试编写普通文本文件到同一目录作为测试)。

  • 我在连接字符串中添加了“read only=False”。


1
你使用的用户连接数据库是否具有写权限?您能否使用Management Studio(或等效工具)连接并写入数据库? - ChrisF
嗯,我没有指定任何凭据类型 - 没有指定Windows身份验证或表单身份验证。当然,我可以在我的本地机器上连接并写入数据库。我将尝试在Web服务器上进行连接。 - Judah Gabriel Himango
1
据我所知,Sqlite没有Windows身份验证或表单身份验证。它只是一个单文件数据库,没有服务,也没有身份验证。我错了吗? - Judah Gabriel Himango
1个回答

4
原来问题出在IIS安全设置上。我需要开启脚本写入权限,然后就神奇地开始工作了。

我遇到了同样的问题。你在哪里打开了“脚本写入访问”?我查看了处理程序,但我只能在“写入”和“脚本”之间选择(单选按钮),而不能同时选择两者。 - Louis Somers
2
我找到了解决方法。这是关于文件系统的Windows级别写入权限问题,需要为IIS用户(IIS_IUSRS)进行配置,而在我的情况下可以通过主机的“WebsitePanel”进行配置。也许它也可以通过FTP(chmod)进行配置,但我没有尝试过。 - Louis Somers
1
@LouisSomers:你应该将你的评论添加为这个问题的答案。 - Maciej

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接