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.Data
DbProviderFactories
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>
Ç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!
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!
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.
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.
Désinstallez/supprimez "Connector/NET" et "MySQL pour Visual Studio" s'ils sont installés.
Installez "MySQL pour Visual Studio" v2.0.5 CTP ( MySQL pour Visual Studio ). Remarque: installez MySQL pour Visual Studio avant Connector/NET.
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.
Téléchargez et installez "EntityFramework" v6.2.0 via NuGet.
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
.
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>
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 :
Ajout d'un simple résumé des versions (depuis que j'ai vu que vous essayez 6.2 qui est bien trop ancien)
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{}
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.
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
Installez la dernière version de nuget https://www.nuget.org/packages/MySql.Data.Entity/
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
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 ...