【问题标题】:Entity Framework error with MySql Connection stringMySql 连接字符串的实体框架错误
【发布时间】:2017-08-14 23:41:29
【问题描述】:

我正在用实体框架在cmd中做一个应用程序来学习,我正在使用MySql数据库,数据库已经创建并连接到Visual Studio,但是我无法打开应用程序,这现在很简单,在下面应用代码和错误:

RdiContext.cs

using rdi_musica.core;
using System.Data.Entity;

namespace rdi_musica.infra
{
   public class RdiContext : DbContext
   {
       public DbSet<Usuario> Usuarios { get; set; }
       public DbSet<Genero> Generos { get; set; }
       public DbSet<Banda> Bandas { get; set; }
       public DbSet<Musica> Musicas { get; set; }

   }
}

BandaRepository.cs

using rdi_musica.core;
using System.Linq;

namespace rdi_musica.infra
{
    public class BandaRepository
    {
       RdiContext context = new RdiContext();
       public Banda getBandaById(int Id)
       {
           var b = context.Bandas.Where(x => x.Id == Id).Select(x => x).FirstOrDefault();
           return b;
       }
    }
 }

App.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<connectionStrings>
  <add name="Default" providerName="MySql.Data.MySqlClient" connectionString="server=localhost;port=3306;database=redeinova_musica;uid=root;password=root"/>
</connectionStrings>
<entityFramework>
   <defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity.EF6" />
   <!--defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /-->
   <providers>
     <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6"/>
     <!--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.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>
</configuration>

还有错误:

错误转录:

The Entity Framework provider type 
'MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6' 
 registered in the application config file for the ADO.NET provider with 
 invariant name 'MySql.Data.MySqlClient' could not be loaded. 

项目结构:

Ps:是的,我安装了 MySql 驱动并添加了引用

【问题讨论】:

    标签: c# mysql entity-framework


    【解决方案1】:

    乍一看似乎你必须在DbContext类上设置DbConfigurationTypeAttribute才能使用MySQL:

    namespace rdi_musica.infra
    {
       [DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
       public class RdiContext : DbContext
       {
           public DbSet<Usuario> Usuarios { get; set; }
           public DbSet<Genero> Generos { get; set; }
           public DbSet<Banda> Bandas { get; set; }
           public DbSet<Musica> Musicas { get; set; }
    
       }
    }
    

    注意:在 MySQL 连接器版本低于 6.8.x 的 EF 5 中,您的数据上下文设置似乎工作正常,但在 MySQL 连接器版本 6.8.x 及更高版本的 EF 6 中,您需要显式设置 DbConfigurationType 以使用 MySql.Data.Entity命名空间。

    如果仍然不够(即抛出相同的异常),请尝试将codeConfigurationType 添加到 web.config 中:

    <entityFramework codeConfigurationType="MySql.Data.Entity.MySqlEFConfiguratio‌​n, MySql.Data.Entity.EF6">
    ...
    </entityFramework>
    

    然后在system.data元素中删除DbProviderFactories的一部分:

    <!-- taken from /a/21954322 by Donald Jansen -->
    <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>
    

    并将entityFramework 元素内的提供者设置修改为:

    <!-- taken from /a/21954322 by Donald Jansen -->
    <entityFramework codeConfigurationType="MySql.Data.Entity.MySqlEFConfiguratio‌​n, 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>
    

    参考:

    Entity Framework Config File Settings

    Entity Framework Code-Based Configuration (MSDN)

    类似问题:

    No Entity Framework provider found for 'MySql.Data.MySqlClient' ADO.NET provider

    Enity Framework With MySQL

    【讨论】:

      猜你喜欢
      • 2021-11-01
      • 1970-01-01
      • 2017-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多