web-dev-qa-db-fra.com

Connecteur MySQL avec EF6 dans Visual Studio 2013

J'essaie de me connecter à MySQL via une application Web MVC C # .NET.

Le problème est que, lorsque j'essaie d'ajouter un modèle de données d'entité ADO.NET, généré à partir de la base de données, en fonction de ma connexion MySQL, le message d'erreur suivant s'affiche:

Votre projet fait référence à la dernière version d’Entity Framework; Cependant, un fournisseur de base de données Entity Framework compatible avec cette version est introuvable pour votre connexion de données . Quittez cet assistant, installez un fournisseur compatible, et reconstruisez votre projet avant d'effectuer cette action

J'utilise les logiciels, mises à niveau et add-on suivants:

  • Visual Studio 2013
  • MySQL Server v5.6.21
  • MySQL pour Visual Studio v1.2.3
  • Connector/NET v6.9.4

Forfaits NuGet:

  • EntityFramework v6.1.1
  • MySQL.Data v6.9.3
  • MySQL.Data.Entities v6.8.3.0
  • SQL.Web v6.9.3

Mon bloc web.config, entityFramework:

    ..
</system.webServer>
<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" />
  </providers>
</entityFramework>
<runtime>
    ..

J'ai examiné toutes les autres solutions que je pouvais trouver ici sur SO et généralement via google. Toutes les ont essayées. Aucune solution ne semble avoir fonctionné ou n'a été utilisée pour des versions très différentes de Connector/NET ou d'une autre version du logiciel. programmes nécessaires.

Quelqu'un peut-il repérer ce que je fais mal?

21
Eax

La solution de base consiste à réinstaller MySQL et VisualStudio y compris Entity et .NET.

Pour une raison quelconque, je ne suis pas sûr de savoir pourquoi, le processus d'installation corrompt les DLL, ou du moins c'est l'expérience que j'ai et celle d'autres collègues. Notre solution a été d'essayer tout ce qui précède sans résultat. Nous avons donc essayé de réinstaller le système et cela a fonctionné. Alors essayez ça :)

8
Lars Nielsen

J'ai eu le même problème. Après avoir installé:

  • Visual Studio 2013 Community Edition
  • MySQL pour Visual Studio 1.2.3
  • MySQL Connector .NET 6.9.5

Je ne voulais pas réinstaller Visual Studio. Après quelques tests, j’ai trouvé que le dossier " C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies " contenait les anciennes versions du fichiers suivants:

  • MySql.Data.dll
  • MySql.Data.Entity.EF6.dll
  • MySql.Web.dll

Après la fermeture de Visual Studio, j'ai remplacé ces fichiers par ceux de " C:\Program Files (x86)\MySQL\Connecteur MySQL Net 6.9.5\Assemblies\v4.5 ", et maintenant cela fonctionne!

Remarque: remplacez 6.9.5 dans le nom du sous-dossier ci-dessus par la version actuelle installée sur votre système.

23
Alix

Cela a fonctionné pour moi SANS la réinstallation de Visual Studio ou quoi que ce soit.

  • installé le dernier plugin MySQL Visual Studio et le connecteur MySQL
  • enlevé la balise entityFramework dans App.config ou Web.config et toutes ses balises enfant.
  • remplacé il par le code suivant:
<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 invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
  </providers>
</entityFramework>
  • ajouté MySql.Data.dll, MySql.Data.Entity.EF6.dll et MySql.Web.dll (si ce n'est pas l'application WPF) font référence au projet.
  • reconstruit le projet, puis a ajouté le modèle ado.net.

NOTE : Assurez-vous de ne supprimer que la balise entityFramework et ses enfants, et remplacez-la par celle ci-dessus. Si vous supprimez des balises "extra", vous risquez d'avoir des problèmes encore plus graves avec votre projet, comme je l'ai fait. X)

18
Stefan Vasiljevic

J'ai rencontré le même problème. Heureusement, je l'ai réparé. MySql.Data.dll ou MySql.Data.Entity.EF6.dll n'est pas compatible avec la version EF 6.1 up. Ce que j'ai fait, j'ai installé EF version 6.0.0.0 dans la console Nuget avec cette commande -> install-package entityframework - version 6.0.0.0 et le problème a été résolu.

3
Chi

Ajoutez simplement à 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" />
    </DbProviderFactories>
   </system.data>

N'oubliez pas de reconstruire la solution avant d'essayer d'ajouter à nouveau un modèle de données d'entité ADO.NET, généré à partir de la base de données. 

3
Matheus Scatolino

Maintenant, ce n'est pas un problème que j'ai moi-même, mais j'ai trouvé la solution possible suivante:

  1. Cliquez avec le bouton droit sur la solution (niveau supérieur dans l'explorateur de solutions).
  2. Gérer les paquets Nuget pour la solution.
  3. Allez sur 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 cliquez sur le bouton "Gérer".
  5. Activer chaque paquet pour tous les projets.

Ce que j'ai remarqué ici, c'est qu'il avait deux paquets supplémentaires que vous n'avez pas mentionnés "MySql.ConnectorNET.Entity" et "MySql.ConnectorNet.Data". Il se peut que vous les manquiez et qu’ils soient nécessaires pour utiliser Entity Framework 6.1.1.

(Source: Aucun fournisseur de structure d'entité trouvé pour )

1
Pheonyx

Si vous devez utiliser EntityFramework avec une base de données mysql, il vous suffit d'installer une version plus ancienne d'EntityFramework telle que la version 5.0 avec la console du gestionnaire de packages. Écrire Install-Package EntityFramework-Version 5.0.0. Enjoy . https://www.nuget.org/packages/EntityFramework/5.0.0

1
Andrea Pulvirenti

J'utilisais la communauté Visual Studio 2013. Je voulais faire du code d'abord sur MySQL db. J'avais le même problème de "Votre projet fait référence à la dernière version d'Entity Framework; ..." Ce qui a résolu mon problème était constitué d'étapes simples décrites ci-dessous.

  1. Après avoir ajouté un projet, utilisez la console de nuget pour ajouter EntityFramework6.1.3, par Install-package EntityFramework.
  2. Console utilisateur pour ajouter une référence MySQL par MySQL.Data.Entity
  3. Ouvrez votre fichier Web.config ou App.config pour modifier les sections entityframework et system.data comme indiqué ci-dessous.

            <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.9.7.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.7.0,       Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
            </DbProviderFactories>
        </system.data>
    
  4. À ce stade, assurez-vous de reconstruire votre projet. (C'est un impératif)

  5. Ajoutez maintenant ADO Entity Models et choisissez MySQL et cela fonctionne.

En passant, les plugins que j'utilise sont M4VS 1.2.3 et MySQL .NET Connector 6.9.7

0
skillworks

J'utilisais tout simplement Nuget pour faire référence à MySQL.dll (etc.) et il faisait automatiquement référence aux dll .net 4.0. Je viens de changer les références à 4.5 et cela a fonctionné.

0
Tod

faire en ligne de commande nuget

update-package -reinstall -ignoreDependencies

et reconstruire la solution ce travail ou moi

0
Artem Hohryakov

tout d’abord, réinstallez vs 1.2.3 en ajoutant les références suivantes à votre projet ou vérifiez ses versions:

MySql.Data.dll

MySql.Data.Entity.EF6.dll

MySql.Web.dll

Supprimez la balise entityFramework par défaut dans App.config ou Web.config Pour reconstruire votre projet, vous pouvez ajouter un modèle de données d'entité ADO.NET.

0
caras

La solution consiste à ajouter ceci à app.config/web.config sur le projet que vous essayez d'ajouter/modifier un modèle de données.

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

changez de version en fonction de votre connecteur.

0
Bart Calixto

J'ai un projet de travail avec la version 6.8.3 de MySQL Connector Libraries et EF6 v6.0.0. Je me souviens de cette erreur, je pense avoir résolu d'ajouter une ligne manuellement à app.config.

Je vous énumère les lignes de mon app.config relatives à EF6 et à la configuration de MySQL, qui sont différentes des vôtres. Cela vous aidera peut-être:

<configSections>
    ...

    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <providers>
      <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.8.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
    </providers>
</entityFramework>

J'avais installé MySQL Connector Net 6.8.3 avec le paquet téléchargé à partir du site MySQL et ajouté deux références au projet: MySql.Data et MySql.Data.Entity.EF6, version 6.8.3 (je remarque que vous utilisez des versions différentes de ces fichiers ...).

J'ai ajouté EF6 (v 6.0.0) au projet via Nuget.

Ne sont pas les dernières versions, mais espérons que cela aide.

0
iag

Il y a encore des problèmes en 2018 ...

Scénario DB-first: pour Visual Studio 2017 Community Edition, j'ai trouvé une combinaison de travail:

  • MySQL pour Visual Studio 1.2.8
  • MySQL Connector .NET 6.9.9
  • EntityFramework 5.0.0 (j’ai essayé différentes combinaisons pour la v6.x sans succès)

Le scénario Code-First que je peux exécuter à l'aide de la documentation officielle https://dev.mysql.com/doc/connector-net/en/connector-net-entityframework60.html Avec le dernier connecteur v .8.0.11 et EF6.

0
miha

J'ai ajouté ceci qui l'a résolu pour moi:

 <runtime>
    <assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
0
gajus