2009-02-16 114 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应用程序部署的完全信任权限。许多共享主机提供商不允许这样做。你可能不想检查这个。