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

但是,將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-

熱門答案

您不太可能再次閱讀此內容,但您在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,並使用條目程序集的設置來定位相應的提供程序。

編輯:順便說一下,當你編寫具有sqlite依賴性的庫時,你可以避免這種複雜性。您不需要使用DbProviderFactories在運行時查找sqlite;您也可以採用編譯時依賴性,這樣可以更容易管理。然後你可以忽略上面的app.config部分,而是替換所有的實例:

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

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

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



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