24

我有一个使用实体框架 6 到 mysql 服务器的 asp.net 解决方案。

现在我必须在新机器上处理该解决方案,
但我有一些问题:
1)在构建解决方案时出现错误:“具有不变名称'MySql.Data.MySqlClient' 的 ADO.NET 提供程序未在机器或应用程序配置文件”。

错误截图

应用程序配置:

<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。

我能做些什么?

4

10 回答 10

24

我遵循了互联网上大多数建议的解决方案,但很抱歉所有都失败了。出现问题是因为 Visual Studio 缺少 MySql 连接器,我已经通过安装 mysql-connector-net-7.0.4 ( https://downloads.mysql.com/archives/c-net/ )解决了这个问题

于 2016-10-19T18:50:07.690 回答
12

它适用于 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> 
于 2018-11-24T13:35:41.403 回答
8

我的机器上没有安装任何 MySql 连接器。通过安装 nuget 修复它:MySql.ConnectorNET.Entity

在此处输入图像描述

于 2016-09-18T10:15:59.317 回答
4

上述解决方案对我不起作用。但是,受此答案的启发,我能够通过删除文件中entityFramework标签下的版本信息来解决此问题Web.config

    <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:正如本后续文章中所指出的,可能还需要手动编辑文件MySql.Data中的版本Web.config

<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>
于 2017-02-18T00:31:38.263 回答
3

我做了很多谷歌并找到解决方案确保 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>
于 2019-06-10T10:17:19.247 回答
3

我能够通过仅将属性“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>
于 2020-01-03T17:30:31.130 回答
2

为了解决这个问题,除了本文中列出的更改之外我还必须手动编辑 in 的版本,MySql.Data如下web.config所示:

<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>
于 2017-04-03T20:08:11.363 回答
2

您必须 codeConfigurationType="MySql.Data.Entity.MySqlEFConfiguration, MySql.Data.Entity.EF6"在配置文件中添加或DbConfiguration.SetConfiguration(new MySqlEFConfiguration())在应用程序启动时调用。

于 2019-09-20T10:27:43.283 回答
1

从引用列表中删除 MySql.Data.Entity.EF6 的旧引用。通过 Nuget 包管理器重新安装,它将工作/

于 2016-07-20T23:02:43.827 回答
0

添加到您的 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 { }
于 2021-06-30T19:49:30.920 回答