部署后,实体框架与SQLite数据库的连接无法正常工作

Dab*_*rnl 5 .net connection entity-framework web-config

我使用实体框架将基于数据集的方法更改为我的sqlite数据库.我使用Visual Studio 2008的向导创建了实体,并将连接字符串存储在app.config中.然后,客户端程序通过WCF与数据库进行通信.当我在控制台应用程序中托管WCF服务时,这在开发计算机上运行良好.在远程计算机上的IIS7中托管服务后,我收到错误:"基础提供程序在打开时失败".它是在第一次从数据库尝试读取操作时生成的.

自动生成的连接字符串是:

     <add name="xPMDbEntities" connectionString="metadata=res://*/PM_EDM.csdl|
            res://*/PM_EDM.ssdl|
            res://*/PM_EDM.msl;
            provider=System.Data.SQLite;
            provider connection string=&quot;
            data source=G:\PMPersistence\xPMDb.s3db&quot;"          
            providerName="System.Data.EntityClient" />
Run Code Online (Sandbox Code Playgroud)

(我将字符串分成几行以使其更具可读性).

在服务器上,即使我将数据库放在与开发计算机上完全相同的位置,这也无法正常工作.是否需要编辑连接字符串的其余部分(我不了解第一件事)?关于如何构建EF连接字符串的良好资源的链接也将非常有用!

编辑:我还将以下部分添加到web.config文件中:

<system.data>
     <DbProviderFactories>
       <remove invariant="System.Data.SQLite"/>
       <add name="SQLite Data Provider" invariant="System.Data.SQLite" 
            description=".Net Framework Data Provider for SQLite"  
            type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite"/>
     </DbProviderFactories>
  </system.data>
Run Code Online (Sandbox Code Playgroud)

这似乎工作(托马斯建议它应该位于machine.config文件中),因为之前我添加了这个条目我得到一个错误,说无法找到System.Data.SQLite.

EDIT2:我在服务器上安装了System.Data.SQLite dll,而不是只将xcopying到BIN目录.Framework/Config和Framework64/Config文件夹中的machine.config现在都具有上面的DbFactory条目.它不会产生差异(除非我必须重新启动服务器??)

Dab*_*rnl 6

连接字符串确实没问题.问题是您必须将system.data.sqlite.dll和system.data.sqlite.linq.dll部署到承载数据库连接的Web服务的Bin文件夹中.

  • 确实.请记住,`System.Data.SQLite.Linq.dll`没有任何公共类.因此,仅将其添加为引用可能不会导致它被部署(某些工具仅部署实际使用的引用,而不是仅出现在`*.csproj`文件中的引用).例如,在TeamCity中,我们必须添加一个手动步骤来将Linq文件复制到bin目录,而在我们的installer-builder中,我们必须这样做.或者,您可以将两者都添加到GAC. (2认同)