无法找到请求的.Net Framework数据提供程序。 它可能没有安装

嗨,这是我第一次在远程服务器上发布一个带有entity framework的项目。 页面工作正常,但当我尝试访问我的保留区域,所以,读取dabatase,我得到此错误

无法找到请求的.Net Framework数据提供程序。 它可能没有安装。

描述 :执行当前Web请求期间发生未处理的exception。 请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

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

来源错误:

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

堆栈跟踪:

[ArgumentException:无法找到请求的.Net Framework数据提供程序。 它可能没有安装。]
System.Data.Common.DbProviderFactories.GetFactory(String providerInvariantName)+1402071
System.Data.EntityClient.EntityConnection.GetFactory(String providerString)+35

[ArgumentException:在配置中找不到指定的商店提供者,或者无效。]
System.Data.EntityClient.EntityConnection.GetFactory(String providerString)+62
System.Data.EntityClient.EntityConnection.ChangeConnectionString(String newConnectionString)+263
System.Data.EntityClient.EntityConnection..ctor(String connectionString)+81
System.Data.Objects.ObjectContext.CreateEntityConnection(String connectionString)+42
System.Data.Objects.ObjectContext..ctor(String connectionString,String defaultContainerName)+16
D:\ trust-company \ shield_trust \ shield_trust \ POCO.Context.cs中的shield_trust.db_shieldtrustEntities..ctor():23
D:\ trust-company \ shield_trust \ shield_trust \ user_login.aspx.cs中的shield_trust.user_login.check_login():65
D:\ trust-company \ shield_trust \ shield_trust \ user_login.aspx.cs中的shield_trust.user_login.entraButton_Click(Object sender,EventArgs e):25
System.Web.UI.WebControls.Button.OnClick(EventArgs e)+118
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)+112
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)+10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl,String eventArgument)+13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)+36 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)+5563

我必须将一些DLL复制到我的bin文件夹或修改我的web.config?

尝试运行此命令以获取已安装的提供程序列表,并检查您的提供程序是否存在:

// This example assumes a reference to System.Data.Common. static DataTable GetProviderFactoryClasses() { // Retrieve the installed providers and factories. DataTable table = DbProviderFactories.GetFactoryClasses(); // Display each row and column value. foreach (DataRow row in table.Rows) { foreach (DataColumn column in table.Columns) { Console.WriteLine(row[column]); } } return table; } 

更新:你需要在目标机器上安装MySQL提供程序,它被称为“MySQL Connector Net xxx”,你可以从这个网站获得

使用我们的应用程序(ASP.NET,测试,Windows服务),我们必须将以下内容添加到app.config或web.config文件(在configuration节点内)以使其工作:

       

对我们来说,它是32对64位进程。 服务器是64位。 安装的ODP.NET(Oracle客户端)也是64位。 我们的应用程序使用Target平台“Any CPU”和“Prefer 32-bit”标志SET编译:

http://grab.by/v5ki

正在运行32位进程。 一旦用标记重新编译未检查,一切都开始工作。

如果您收到如下对话框…

“无法找到请求的.NET Framework数据提供程序。可能未安装”

查看以下位置的machine.config文件…

 C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config 

删除任何空

 "DbProviderFactories" nodes. 

当连接到数据库时,所谓的“数据提供者”用于实现的抽象。

您的exception似乎表明目标计算机上不存在给定的数据提供者。 您在部署的环境中使用哪个数据库? 检查web.config连接字符串以获取详细信息。

您可能必须自己在该计算机上安装给定的数据提供程序(一次),以便可以从全局程序集缓存(GAC)中获取。

令人尴尬的是,我花了三天时间试图解决这个错误。 我的“connectionString”上有一个不正确的“providerName”属性

改变自:

      

至:

      

我已经指定了System.Data.MySqlClient而不是Mysql.Data.MySqlClient

D’哦!

我知道这是旧的,但正如udog所解释的那样,错误消息“在配置中找不到指定的商店提供商,或者无效”表示问题是什么。 因此,根据后端数据库,将提供程序信息添加到配置文件中。 如果已添加,请确保它是正确的。 对于oracle,如果使用EF和oracle.DataAccess的托管提供程序,它将看起来像这样。 请注意您的oracle DLL版本可能不同。

        

为了进一步构建udog的答案,如果您要使用此数据提供程序在服务器上拥有多个应用程序,那么将它添加到machine.config文件可能更有意义。

正如Thomas所说,machine.config文件位于:

C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Config C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config

machine.config条目类似于web.config条目:

      

注意:如果您的应用程序位于多个服务器上(例如QA /测试服务器和生产服务器)并且您只在其中一个服务器上出现此错误,我建议您在machine.config文件之间执行文件dif以查看是否存在是服务器之间的差异。