具有不变名称“MySql.Data.MySqlClient”的 ADO.NET 提供程序未在机器或应用程序配置文件中注册
Posted
技术标签:
【中文标题】具有不变名称“MySql.Data.MySqlClient”的 ADO.NET 提供程序未在机器或应用程序配置文件中注册【英文标题】:The ADO.NET provider with invariant name 'MySql.Data.MySqlClient' is either not registered in the machine or application config file 【发布时间】:2016-11-22 00:23:18 【问题描述】:我有一个使用实体框架 6 到 mysql 服务器的 asp.net 解决方案。
现在我必须在新机器上解决这个问题, 但我有一些问题: 1) 构建解决方案时出现错误:“具有不变名称'MySql.Data.MySqlClient' 的 ADO.NET 提供程序未在机器或应用程序配置文件中注册”。
App.config:
<entityFramework>
<providers>
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
</providers>
</entityFramework>
<system.data>
<DbProviderFactories>
<remove invariant="MySql.Data.MySqlClient" />
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>
2) 打开 model.edmx 文件时,我收到消息:“实体模式设计器无法显示您请求的文件”。
我已经在机器上安装了:
1) mysql 连接器/网络 6.9.9 2) Visual Studio 1.2.6 的 mysql 3) mysql 连接器 odbc 5.3.6.
我能做什么?
【问题讨论】:
【参考方案1】:我遵循了互联网上大多数建议的解决方案,但很抱歉所有都失败了。出现问题是因为 Visual Studio 缺少 MySql 连接器,我通过安装 mysql-connector-net-7.0.4 (https://downloads.mysql.com/archives/c-net/) 解决了它
【讨论】:
我正在使用 VS 2015 和一个全新的 MVC 5 应用程序。我尝试了其他所有方法,但仍然无法查看 edmx。这是我在断断续续尝试解决问题几天后尝试的最后一件事。这成功了。一旦 msi 完成,edmx 图形界面就栩栩如生。非常感谢! @iQalalwa 安装后怎么办?我现在应该采取什么步骤? @faisal 重启你的视觉工作室后一切都必须正常。没有更多的步骤 我在这里问了一个相关问题:Why do I still need the MySQL Connector installed on the computer despite having the proper NuGet packages? 同样,MySQL .NET 连接器未安装到 GAG 中。我使用 MySQL Installer 软件,从那里安装它,然后用 Visual Studio 中的模型设计器打开文件。【参考方案2】:它适用于 app.config 中的以下部分:
<system.data>
<DbProviderFactories>
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory,MySql.Data" />
</DbProviderFactories>
</system.data>
【讨论】:
【参考方案3】:我的机器上没有安装任何 MySql 连接器。 通过安装 nuget 修复它:MySql.ConnectorNET.Entity
【讨论】:
【参考方案4】:上述解决方案对我不起作用。但是,受this answer 的启发,我能够通过删除我的Web.config
文件中entityFramework
标记下的版本信息来解决这个问题:
<entityFramework>
<defaultConnectionFactory
type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity.EF6" />
<providers>
<provider invariantName="MySql.Data.MySqlClient"
type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d">
</provider>
</providers>
</entityFramework>
变成:
<entityFramework>
<defaultConnectionFactory
type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity.EF6" />
<providers>
<provider invariantName="MySql.Data.MySqlClient"
type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6">
</provider>
</providers>
</entityFramework>
ETA:正如this follow-up 中所指出的,可能还需要在Web.config
文件中手动编辑MySql.Data
的版本:
<dependentAssembly>
<assemblyIdentity name="MySql.Data" culture="neutral" publicKeyToken="c5687fc88969c44d" />
<bindingRedirect oldVersion="0.0.0.0-6.9.9.0" newVersion="6.9.9.0" />
</dependentAssembly>
【讨论】:
【参考方案5】:我已经做了很多谷歌并找到了解决方案 确保 MySQL.Data.dll、MySQL.Web.dll、MySQL.Data.Entity.dll 和 System.Data.Entity.dll 都被复制到本地(右键单击程序集并确保 Copy Local 设置为 true) 当我尝试调试此问题时,我还在本地添加了以下内容,但这可能是不必要的 System.Data.dll [可能是可选的] System.Data.Entity.Design [可能是可选的]
这是您在 google 或 AppHarbor 上的许多地方都不会读到的步骤! 将以下内容添加到您的 web.config 文件中:
<system.data>
<DbProviderFactories>
<clear />
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient"
description=".Net Framework Data Provider for MySQL"
type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data,
Version=6.4.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>
【讨论】:
【参考方案6】:我能够通过仅将属性“DbConfigurationType”添加到我的上下文类来解决它,我在我从某个地方获得的代码示例中找到了它,但不记得起源很抱歉。它与 Dmitry 的答案相同,但使用属性作为实现
[DbConfigurationType(typeof(MySqlEFConfiguration))]
public class MySqlWeatherContext : DbContext
public MySqlWeatherContext() : base("context")
public DbSet<Measurepoint> Measurepoints get; set;
这是我的配置文件:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
<connectionStrings>
<add name="context" providerName="MySql.Data.MySqlClient" connectionString="" />
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"/>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.10.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</providers>
</entityFramework>
</configuration>
【讨论】:
【参考方案7】:为了解决这个问题,除了this post中列出的更改之外,我还不得不手动编辑web.config
中MySql.Data
的版本,如下所示:
<dependentAssembly>
<assemblyIdentity name="MySql.Data" culture="neutral" publicKeyToken="c5687fc88969c44d" />
<bindingRedirect oldVersion="0.0.0.0-6.9.9.0" newVersion="6.9.9.0" />
</dependentAssembly>
【讨论】:
为什么在安装 v6.9.9 时不会自动更新?这解决了我的问题。很好的收获。【参考方案8】:您必须添加
codeConfigurationType="MySql.Data.Entity.MySqlEFConfiguration, MySql.Data.Entity.EF6"
到您的配置文件中或在应用程序启动时调用 DbConfiguration.SetConfiguration(new MySqlEFConfiguration())
。
【讨论】:
【参考方案9】:从引用列表中删除 MySql.Data.Entity.EF6 的旧引用。通过 Nuget 包管理器重新安装,它将工作/
【讨论】:
【参考方案10】:添加到您的 web.config
<entityFramework>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.EntityFramework" />
</providers>
在当前上下文类中添加 DbConfigurationType 属性
[DbConfigurationType(typeof(MySqlEFConfiguration))]
public class MeuContexto: DbContext
【讨论】:
以上是关于具有不变名称“MySql.Data.MySqlClient”的 ADO.NET 提供程序未在机器或应用程序配置文件中注册的主要内容,如果未能解决你的问题,请参考以下文章
具有不变名称“System.Data.SqlServerCe.4.0”的 ADO.NET 提供程序未注册
找不到具有不变名称“System.Data.SqlClient”的 ADO.NET 提供程序的实体框架提供程序。
找不到具有不变名称“System.Data.SqlClient”的 ADO.NET 提供程序的实体框架提供程序。
找不到具有不变名称“System.Data.SqlClient”的 ADO.NET 提供程序的实体框架提供程序
错误:找不到具有不变名称“System.Data.SqlClient”的 ADO.NET 提供程序的实体框架提供程序
具有不变名称“MySql.Data.MySqlClient”的 ADO.NET 提供程序未在机器或应用程序配置文件中注册