实体框架+ SQLite部署

Pom*_*air 6 sqlite asp.net-mvc entity-framework system.data.sqlite

我有一个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
Run Code Online (Sandbox Code Playgroud)

服务提供商评论说他们不支持SQLite.我曾经认为SQLite独立于服务提供商的设置,因为它可以部署App_Data.

有没有成功实体框架+ SQLite部署的经验?

干杯,-pom-

Eam*_*nne 13

您不太可能再次阅读此内容,但您在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>
Run Code Online (Sandbox Code Playgroud)

具体来说,如果您在链接到您网站的库中使用sqlite,则必须将其添加到网站的配置文件中- 而不是库中! 这是因为您正在加载提供程序:实际上,您在运行时使用字符串"System.Data.SQLite"确定要加载哪个dll,并使用条目程序集的设置来定位相应的提供程序.

编辑:顺便说一下,当你编写具有sqlite依赖性的库时,你可以避免这种复杂性.您不需要DbProviderFactories在运行时使用查找sql​​ite; 您也可以采用编译时依赖性,这样可以更容易管理.然后你可以忽略上面的app.config部分,而是替换所有的实例:

DbProviderFactories.GetFactory("System.Data.SQLite").CreateConnection()
Run Code Online (Sandbox Code Playgroud)

System.Data.SQLite.SQLiteFactory.Instance.CreateConnection()
Run Code Online (Sandbox Code Playgroud)

如果这样做,则使用普通库调用来创建连接,并且没有运行时选择的数据库提供程序.这可能不太灵活,因为您不能再通过配置文件交换数据提供程序,但对于许多足够的库来说.不幸的是,如果你不控制库代码,这不是一个选项.


tva*_*son 0

您是否尝试过将所需的 DLL 添加到应用程序的 bin 目录中?您可能需要查看 Phil Haack 的Bin 部署 ASP.NET MVC文章,了解如何自动执行此操作。