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

.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" />

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

在服务器上,即使我将数据库放在与开发计算机上完全相同的位置,这也无法正常工作。是否需要编辑连接字符串的其余部分(我不了解第一件事)?关于如何构建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>

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

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

一般承认的答案

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


热门答案

你的连接字符串对我来说是正确的。您确定SQLite ADO.NET提供程序已正确安装在服务器上吗?打开machine.config文件,检查DbProviderFactories部分中是否有System.Data.SQLite条目

关于如何构建EF连接字符串的良好资源的链接也将非常有用!

基本上,您必须指定: - 模型元数据(带有“res:// ...”的部分) - 商店提供者(在您的情况下为“System.Data.SQLite”) - 商店连接字符串,具体取决于您使用哪个提供商

动态构造连接字符串的最简单方法是使用EntityConnectionStringBuilder类以及商店提供程序的连接字符串构建器。




许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因