web-dev-qa-db-fra.com

Aucun fournisseur Entity Framework trouvé pour le fournisseur ADO.NET «MySql.Data.MySqlClient»

J'essaie d'utiliser Entity Framework avec MySQL et j'obtiens l'erreur ci-dessus. J'ai le dernier connecteur MySQL installé.

L'erreur complète se lit comme suit:

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.

Cependant, je ne trouve rien qui suggère juste comment l'enregistrer dans la section 'entityFramework'.

Certains autres messages ( exemple ) suggèrent d'ajouter le fournisseur au system.DataDbProviderFactories section comme ceci:

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

Mais cela ne fonctionne pas car il prétend que le nom invariant est dupliqué. Et, si je parcours réellement le System.Data.Common.DbProviderFactories Je peux voir que le dernier est le fournisseur 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

Le fournisseur est donc là, mais EF refuse de l'utiliser. Des idées?

Ma configuration complète ressemble à ceci:

<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>
32
Matt Burland

Ça ne fait rien. J'ai remarqué que j'avais EF 6 installé. Je l'ai supprimé et j'ai essayé EF 5 à la place (qui, selon NuGet, est la dernière version stable) et il a commencé à fonctionner.

Pourtant, un message d'erreur plus utile aurait été agréable!

0
Matt Burland

dans EF5 ou moins, tout va bien. dans EF6, vous devez utiliser le connecteur mysql 6.8.x et ajouter DbConfigurationTypeAttribute à votre DbContext:

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

quelle MySqlEFConfiguration se trouve dans MySql.Data.Entity.EF6.dll dans 6.8.x. Essaye!

33
AlexanderYao

Vous devez créer cette section dans config (EF 5):

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

pdate: Utilisez cette définition pour EF 6:

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

Merci à elcool.

28
Der_Meister

Je viens d'avoir la même situation en essayant de configurer l'environnement Visual Studio Professional 2017 avec MySQL, ADO.NET (Database First) et EF6.

Après avoir traversé l'enfer avec chaque connecteur/NET disponible, je l'ai fait fonctionner avec Connector/NET v6.9.10 et en suivant les étapes ci-dessous.

  1. Désinstallez/supprimez "Connector/NET" et "MySQL pour Visual Studio" s'ils sont installés.

  2. Installez "MySQL pour Visual Studio" v2.0.5 CTP ( MySQL pour Visual Studio ). Remarque: installez MySQL pour Visual Studio avant Connector/NET.

  3. Installez "Connector/NET" v6.9.10 ( Connector/Net ). https://i.stack.imgur.com/XOT1I.jpg Remarque: J'ai d'abord essayé d'utiliser Connector/NET v6.8, v6.10 et v8, mais aucun n'a fonctionné Ici vous pouvez trouver toutes les versions de connecteur et les compatibilités avec les IDE Visual Studio , mais jusqu'à présent, cette liste est inexacte.

  4. Téléchargez et installez "EntityFramework" v6.2.0 via NuGet.

  5. Ajoutez des références à C:\Program Files (x86)\MySQL\Connector.NET 6.9.10\Assemblies\v4.5\MySql.Data.dll et C:\Program Files (x86)\MySQL\Connector.NET 6.9.10\Assemblies\v4.5\MySql.Data.Entity.EF6.dll.

  6. Ajoutez les informations du fournisseur MySQL EF6 dans App.config sous les fournisseurs de structure d'entité comme suit:

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

Et c'était tout. VS2017 était prêt à partir pour moi. J'espère que cela fonctionne pour tout le monde, comme pour moi aujourd'hui.

Références :

  1. Impossible de créer un modèle de données d'entité - en utilisant MySql et EF6

  2. Aucun fournisseur Entity Framework trouvé pour le fournisseur ADO.NET 'MySql.Data.MySqlClient'

6
Alfredo Rodriguez

Ajout d'un simple résumé des versions (depuis que j'ai vu que vous essayez 6.2 qui est bien trop ancien)

  • Pour EF4, utilisez Connector/NET 6.6.x (current GA is 6.6.6)
  • Pour EF5, utilisez Connector/NET 6.7.x (current GA is 6.7.4) or Connector/NET 6.8.x (current GA is 6.8.3) ).
  • Pour EF6, utilisez Connector/NET 6.8.x (current GA is 6.8.3).
4

J'ai mis à jour EntityFramework 5.0 vers 6.1 et le connecteur MySQL 6.8.3 et je n'ai eu qu'à ajouter l'attribut pour que les choses recommencent. Avant d'ajouter l'attribut, tout se compilerait correctement mais se bloquerait lors de l'exécution.

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

Dans mon cas, c'était une référence manquante. Lorsque vous mettez à niveau vers EntityFramework 6, vous devez ajouter une référence à l'assembly

System.Data.Entity

Je pense que c'est parce que MySql.Data.Entity.EF6 hérite d'un tas de choses dans cette Assemblée, qu'il ne l'a pas fait pour la version précédente d'EF.

Lorsque votre app.config est bon et que toutes vos références semblent correctes, c'est une solution qui mérite d'être vérifiée.

1
Mickael V.

Pour référence future, voici le guide officiel sur l'utilisation de MySQL Connector/Net avec EF 6 qui comprend toutes les étapes nécessaires (assemblages, configurations, ... etc.): Chapitre 10 EF 6 Support

1
Moayad Mardini

Installez la dernière version de nuget https://www.nuget.org/packages/MySql.Data.Entity/

1
Emanuele

J'ai essayé toutes les combinaisons différentes de chaîne de configuration et de configuration, mais j'ai finalement compris. Ma solution a le code source dans un projet et les tests dans un autre. J'utilisais Entity Framework 6.1.1 et j'avais installé MySql Connector 6.8.3 et MySql pour Visual Studio 1.2.3.

Le problème était que NuGet gérait les packages, mais seulement les avait inclus dans le projet principal. La solution était de

  1. Faites un clic droit sur la solution (niveau supérieur dans l'explorateur de solutions)
  2. Gérer les packages Nuget pour la solution
  3. Accédez à l'onglet Installé
  4. Pour tous les packages liés à EntityFramework (MySql.Data, MySql.Data.Entities, MySql.ConnectorNET.Entity et MySql.ConnectorNET.Data), sélectionnez-les puis sélectionnez le bouton "Gérer".
  5. Activez chaque package pour tous les projets.
1
Gaʀʀʏ

Peut-être que le fournisseur MySql est installé dans la configuration de la machine (par exemple par le programme d'installation du connecteur .net? La fabrique de connexions par défaut doit également être quelque chose comme "MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version = 6.7.4.0, Culture = neutre, PublicKeyToken = c5687fc88969c44d "je suppose ...

0
Konstantin Isaev