部署後,實體框架與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類以及商店提供程序的連接字符串構建器。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因