6

完成 ASP.NET MVC 3(在此处查找)后,我尝试在线发布该应用程序。我联系了托管公司以确定是否可以托管 MVC 3 应用程序。但我不得不 bin 部署(dll 文件)应用程序。因此,在hanselmans blog上执行了一些步骤后,我陷入了以下错误:

找不到请求的 .Net Framework 数据提供程序。它可能没有安装。说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.ArgumentException:找不到请求的 .Net Framework 数据提供程序。它可能没有安装。

源错误:

在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常起源和位置的信息。

堆栈跟踪:

[ArgumentException:找不到请求的 .Net Framework 数据提供程序。它可能没有安装。]
System.Data.Common.DbProviderFactories.GetFactory(String providerInvariantName) +1420503
System.Data.Entity.Internal.LazyInternalConnection.TryInitializeFromAppConfig(String name) +362
System.Data.Entity.Internal.LazyInternalConnection.Initialize () +49
System.Data.Entity.Internal.LazyInternalConnection.get_ConnectionHasModel() +10 System.Data.Entity.Internal.LazyInternalContext.InitializeContext() +265 System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(类型 entityType) + 17
System.Data.Entity.Internal.Linq.InternalSet 1.get_InternalContext() +15 System.Data.Entity.Infrastructure.DbQuery1.Initialize() +62
System.Data.Entity.Internal.Linq.InternalSet
1.System.Linq.IQueryable.get_Provider() +37 System.Linq.Queryable.OrderByDescending(IQueryable1个来源,表达式2个参数)+188 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext,ActionDescriptor actionDescriptor,IDictionary`2个参数)+271 keySelector) +66
MvcMusicStore.Controllers.HomeController.GetTopSellingAlbums(Int32 count) +420 MvcMusicStore.Controllers.HomeController.Index() +47
lambda_method(Closure , ControllerBase , Object[] ) +40
System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +17
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary

任何帮助表示赞赏。

4

5 回答 5

14

根据我的经验,该错误意味着 web.config 中连接字符串的属性值providerName正确,或者未安装提供程序。如果您设置为(SQL Server Compact),这在开发中并不少见,我可以向您保证它没有安装在您的 Web 主机上;它仅在 Visual Studio 中用于开发。您可能只需要将其更改为真正的 SQL Server 提供程序:.providerNameSystem.Data.SqlServerCe.4.0System.Data.SqlClient

于 2013-04-23T14:31:11.360 回答
2

我解决了这个问题。

我在 providerName 中找到了一个空格。因此,.net 框架无法与数据库建立连接字符串。

检查您的 connectionString 标记属性值。您的 providerName 可能没有很好地定义。查找任何空格(因为命名不允许任何空格)并检查 providerName 值中的额外字符。

于 2013-09-23T06:14:57.633 回答
1

另一个数据点...

我使用 Oracle 和实体框架。我安装了 Oracle ODP.NET, Managed Driver 来解决这个问题。在 NuGet 包管理器中输入

Install-Package Oracle.ManagedDataAccess

它将使用适当的程序集信息和 DbProviderFactories 更新 App.config。我正在使用 VS 2015,Entity Framework 6。我还安装了 Oracle Developer Tools。

于 2016-12-06T22:12:09.927 回答
0

我遇到了类似的问题 .. 并且有一个非常有趣的解决方案 .. 只需查看您的 ConnectionString ——如果它与您用于其他 ASP.Net 应用程序的相同,那么它不应该是......实体框架完全不同的情况

<add name="EmployeeContext" connectionString="Server=.\SQLEXPRESS;Database=DB1;User Id=user1;password=password1;" providerName="System.Data.SqlClient**;**" />

改成——

<add name="EmployeeContext" connectionString="Server=.\SQLEXPRESS;Database=DB1;User Id=user1;password=password1;" providerName="System.Data.SqlClient"/>

你能找出区别吗..只有一点点——没有';' 在 ProviderName 的末尾 .. 是的,这会有所不同 .. 它应该与 ProviderName 的相同副本相同,尽管我没有检查区分大小写。但这解决了我的问题

于 2013-12-20T10:55:00.477 回答
0

错误是完美的,上面的评论很好,但在我的情况下,我在 web.config 文件中拼写错误的提供程序:System.Data.SqlClinet而不是System.Data.SqlClient

于 2017-04-16T12:35:10.403 回答