visual studio referencia reciente proyecto net mas hace framework mysql entity-framework

studio - No se ha encontrado ningún proveedor de Entity Framework para el proveedor ADO.NET ''MySql.Data.MySqlClient''



mysql entity framework visual studio 2017 (11)

Intento utilizar Entity Framework con MySQL y obtengo el error anterior. Tengo el último conector MySQL instalado.

El error completo dice:

No Entity Framework provider found for ''MySql.Data.MySqlClient'' ADO.NET provider. Make sure the provider is registered in the ''entityFramework'' section of the application config file.

Sin embargo, no puedo encontrar nada que sugiera cómo registrarlo en la sección ''entityFramework''.

Algunas otras publicaciones ( example ) sugieren agregar el proveedor al system.Data DbProviderFactories Sección system.Data DbProviderFactories como esta:

<DbProviderFactories> <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.2.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" /> </DbProviderFactories>

Pero eso no funciona porque afirma que el nombre invariant está duplicado. Y, si realizo una iteración a través de System.Data.Common.DbProviderFactories , puedo ver que el último es el proveedor de MySQL:

MySQL Data Provider .Net Framework Data Provider for MySQL MySql.Data.MySqlClient MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.6.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d

Entonces el proveedor está ahí, pero EF se niega a usarlo. ¿Algunas ideas?

Mi configuración completa se ve así:

<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> <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, Version=6.2.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" /> </DbProviderFactories>--> </system.data> <connectionStrings> <add name="myContext" connectionString="server=****;User Id=****;password=****;Persist Security Info=True;database=myDb" providerName="MySql.Data.MySqlClient" /> </connectionStrings> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> <entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> <parameters> <parameter value="v11.0" /> </parameters> </defaultConnectionFactory> </entityFramework> </configuration>


¿Puede simplemente el proveedor de MySql instalarse en la configuración de la máquina (por ejemplo, mediante el instalador del conector .net)? También la fábrica de conexiones predeterminada debería ser algo así como "MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version = 6.7.4.0, Culture = neutral, PublicKeyToken = c5687fc88969c44d "supongo ...


Actualicé EntityFramework 5.0 a 6.1 y el conector MySQL 6.8.3 y solo tuve que agregar el atributo para que todo vuelva a funcionar. Antes de agregar el atributo, todo se compilaría bien, pero se bloquearía en el tiempo de ejecución.

[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))] public class DemoContext : DbContext{}


En mi caso, era una referencia faltante. Cuando se actualiza a EntityFramework 6, debe agregar una referencia al ensamblaje

System.Data.Entity

Creo que es porque MySql.Data.Entity.EF6 hereda de un montón de cosas en este ensamblaje, que no fue para la versión anterior de EF.

Cuando su app.config es buena y todas sus referencias parecen estar bien, es una solución que vale la pena verificar.



Necesita crear esta sección en config (EF 5):

<entityFramework> <!-- ... --> <providers> <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity" /> </providers> </entityFramework>

Actualización: use esta definición para EF 6:

<entityFramework> <!-- ... --> <providers> <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" /> </providers> </entityFramework>

Gracias a elcool .


No importa. Noté que tenía EF 6 instalado. Lo eliminé y probé con EF 5 (que según NuGet es la última versión estable) y comenzó a funcionar.

Aún así, ¡un mensaje de error más útil hubiera sido agradable!


Para referencia futura, esta es la guía oficial sobre el uso de MySQL Connector / Net con EF 6 que incluye todos los pasos necesarios (ensambles, configuraciones, ... etc.): Capítulo 10 Soporte EF 6


Probé todas las combinaciones diferentes de config string y setup, pero finalmente lo descubrí. Mi solución tiene el código fuente en un proyecto y prueba en otro. Estaba usando Entity Framework 6.1.1 y había instalado MySql Connector 6.8.3 y MySql para Visual Studio 1.2.3.

El problema era que tenía a NuGet administrando los paquetes, pero solo los tenía incluidos en el proyecto principal. La solución fue

  1. Haga clic derecho en la Solución (nivel superior en el explorador de soluciones)
  2. Administrar paquetes de Nuget para la solución
  3. Ve a la pestaña Instalado
  4. Para todos los paquetes relacionados con EntityFramework (MySql.Data, MySql.Data.Entities, MySql.ConnectorNET.Entity y MySql.ConnectorNET.Data), selecciónelos y luego seleccione el botón "Administrar".
  5. Habilite cada paquete para todos los proyectos.

Simplemente tuve la misma situación cuando intenté configurar el entorno de Visual Studio Professional 2017 con MySQL, ADO.NET (Database First) y EF6.

Después de pasar por un infierno con cada conector / NET disponible, lo hice funcionar con Connector / NET v6.9.10 y siguiendo los pasos a continuación.

  1. Desinstale / elimine "Connector / NET" y "MySQL for Visual Studio" si está instalado.

  2. Instalar "MySQL para Visual Studio" v2.0.5 CTP ( MySQL para Visual Studio ). Nota: Instalar MySQL para Visual Studio antes de Connector / NET.

  3. Instale "Connector / NET" v6.9.10 ( Connector/Net ). https://i.stack.imgur.com/XOT1I.jpg Nota: intenté usar Connector / NET v6.8, v6.10 y v8 primero, pero ninguno funcionó Aquí puede encontrar todas las versiones de Connector y las Compatibilidades con Visual IDEs de Studio , pero hasta ahora esta lista es inexacta.

  4. Descargue e instale "EntityFramework" v6.2.0 a través de NuGet.

  5. Agregue referencias a C:/Program Files (x86)/MySQL/Connector.NET 6.9.10/Assemblies/v4.5/MySql.Data.dll y C:/Program Files (x86)/MySQL/Connector.NET 6.9.10/Assemblies/v4.5/MySql.Data.Entity.EF6.dll .

  6. Agregue la información del proveedor de MySQL EF6 dentro de App.config bajo los proveedores del marco de la entidad de la siguiente manera:

<entityFramework> <providers> <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" /> </providers> </entityFramework>

  1. Reconstruir proyecto

Y eso fue todo. VS2017 estaba listo para mi. Espero que esto funcione para todos, como lo hizo para mí hoy.

Referencias

  1. No se puede crear un modelo de datos de entidad: utilizando MySql y EF6

  2. share


Solo agregué un resumen de las versiones (ya que vi que estás intentando 6.2 que es demasiado viejo)

  • Para EF4, use Connector / NET 6.6.x (GA actual es 6.6.6)
  • Para EF5, use Connector / NET 6.7.x (GA actual es 6.7.4) o Connector / NET 6.8.x (GA actual es 6.8.3).
  • Para EF6, use Connector / NET 6.8.x (GA actual es 6.8.3).

en EF5 o menos, todo está bien. en EF6, necesita usar el conector de mysql 6.8.x y agregar DbConfigurationTypeAttribute a usted DbContext:

[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))] public class DemoContext : DbContext{}

que MySqlEFConfiguration está en MySql.Data.Entity.EF6.dll en 6.8.x. ¡Pruebalo!