2009-02-16 155 views
6

我有一個ASP.NET MVC應用程序通過實體框架使用SQLite數據庫。 一切適用於VS 2008的本地開發網絡服務器。實體框架+ SQLite部署

但是,在部署Web應用程序到我的服務提供商導致此錯誤:

[ArgumentException: Unable to find the requested .Net Framework Data Provider. It may not be installed.] 
    System.Data.Common.DbProviderFactories.GetFactory(String providerInvariantName) +1308959 
    System.Data.EntityClient.EntityConnection.GetFactory(String providerString) +35 

服務提供商表示,他們不支持的SQLite。雖然SQLite獨立於服務提供者的設置,因爲它是App_Data可部署的。

有沒有經驗的成功的實體框架+ SQLite部署?

乾杯, -pom-

回答

0

你有沒有嘗試添加所需的DLL(S)到應用程序的bin目錄?您可能想看看Phil Haack的文章Bin Deploying ASP.NET MVC,瞭解如何自動完成此操作的想法。

+0

嗨,謝謝你的回答。是的,我見過菲爾的博客帖子。我可以部署普通的ASP.NET MVC應用程序。這是與實體框架+ SQLite的組合是有問題的。我已經把System.Data.Entity.dll和System.Data.SQLite.dll都升級到bin文件夾。沒有運氣。 – Pompair 2009-02-16 15:34:52

+1

嗯。它們是否位於Web配置的裝配部分中? – tvanfosson 2009-02-16 16:35:18

12

你就不可能再被讀這篇文章,但是你錯過了你的app.config下面(或者,對你來說,web.config中):

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

特別是,如果你是在鏈接到您的網站的庫中使用sqlite,您必須將此添加到配置文件網站 - 不是圖書館!這是因爲您如何加載提供程序:實質上,您在運行時使用字符串「System.Data.SQLite」來確定在運行時加載哪個dll,並使用條目的設置來定位相應的提供程序部件。

編輯:順便說一句,當你寫一個具有源碼扶養庫,就可以避免這種複雜性。您不需要使用DbProviderFactories在運行時查找sql​​ite;您也可以在編譯時依賴它,這可以更容易管理。然後你就可以忽略上述的app.config部分,而是替換的所有實例:

DbProviderFactories.GetFactory("System.Data.SQLite").CreateConnection() 

System.Data.SQLite.SQLiteFactory.Instance.CreateConnection() 

如果這樣做,您使用的是普通的庫調用來創建連接並且沒有運行時選擇數據庫提供程序。這可能不那麼靈活,因爲你不能再通過配置文件交換數據提供者,但對於許多足夠的庫。不幸的是,如果你不控制庫代碼,這不是一個選項。

0

SQLite需要ASP.NET應用程序部署的完全信任權限。許多共享主機提供商不允許這樣做。你可能不想檢查這個。