C# 具有固定名称的ADO.NET提供程序';MySql.Data.MySqlClient';未在计算机或应用程序配置文件中注册
我有一个使用EntityFramework6到mysql服务器的asp.net解决方案 现在我必须在一台新机器上开发该解决方案,C# 具有固定名称的ADO.NET提供程序';MySql.Data.MySqlClient';未在计算机或应用程序配置文件中注册,c#,mysql,entity-framework-6,connector-net,C#,Mysql,Entity Framework 6,Connector Net,我有一个使用EntityFramework6到mysql服务器的asp.net解决方案 现在我必须在一台新机器上开发该解决方案, 但我有一些问题: 1) 构建解决方案时,出现错误:“具有固定名称'MySql.Data.MySqlClient'的ADO.NET提供程序未在计算机或应用程序配置文件中注册”。 App.config: <entityFramework> <providers> <provider invariantName="MySql.Da
但我有一些问题:
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>
我已在机器上安装:
1) mysql连接器/net 6.9.9
2) mysql for visual studio 1.2.6
3) mysql连接器odbc 5.3.6
我能做什么?从引用列表中删除MySql.Data.Entity.EF6的旧引用。通过Nuget Package manager重新安装,它将正常工作/我的机器上没有安装任何MySql连接器。
通过安装nuget:MySql.ConnectorNET.Entity修复了此问题
我遵循了互联网上大多数建议的解决方案,但很抱歉,所有方案都失败了。出现这个问题是因为visual studio缺少MySql连接器,我通过安装MySql-connector-net-7.0.4()解决了这个问题。上述解决方案对我不起作用。然而,受启发,我通过删除我的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>
<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>
为了解决这个问题,除了中概述的更改外,我还必须在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>
它适用于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>
我在谷歌上做了很多工作,找到了解决方案
确保MySQL.Data.dll、MySQL.Web.dll、MySQL.Data.Entity.dll和System.Data.Entity.dll都是本地复制的(右键单击程序集并确保将Copy local设置为true)
在调试这个问题时,我还在本地添加了以下内容,但这可能是不必要的
System.Data.dll[可能是可选的]
System.Data.Entity.Design[可能可选]
这是你在谷歌或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>
<?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>
您必须添加
codeConfigurationType=“MySql.Data.Entity.MySqlEFConfiguration,MySql.Data.Entity.EF6”
到您的配置文件中,或者在应用程序启动时调用DbConfiguration.SetConfiguration(new MySqlEFConfiguration())
。我能够通过只向上下文类添加属性“DbConfigurationType”来解决这个问题,我在某个地方的一个代码样本中找到了它,但是我想不起它的来源。这与Dmitry的答案相同,但使用属性作为实现
[DbConfigurationType(typeof(MySqlEFConfiguration))]
public class MySqlWeatherContext : DbContext
{
public MySqlWeatherContext() : base("context"){}
public DbSet<Measurepoint> Measurepoints { get; set; }
}
[DbConfigurationType(typeof(MySqlEFConfiguration))]
公共类MySqlWeatherContext:DbContext
{
public MySqlWeatherContext():基(“上下文”){}
公共数据库集度量点{get;set;}
}
这是我的配置文件:
<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>
<?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>
我正在使用VS 2015和绿地MVC 5应用程序。我尝试了其他方法,但仍然无法查看edmx。这是我在断断续续地试图解决这个问题几天后做的最后一件事。这就成功了。msi一完成,edmx图形界面就开始活跃起来。非常感谢@iQalalwa安装后要做什么?我现在应该采取什么措施?@faisal重启visual studio后,一切都必须正常。没有更多的步骤,我在这里问了一个相关的问题:这里也一样,MySQL.NET连接器没有安装到GAG中。我使用了MySQL安装软件,从那里安装,然后Visual Studio中的模型设计器打开了该文件。为什么在安装v6.9.9时不会自动更新?这解决了我的问题。接得好。谢谢,属性解决了我的问题!