web-dev-qa-db-fra.com

Impossible d'utiliser une connexion MySQL pour l'entité framework 6

J'essaie d'utiliser le framework d'entité 6 avec MySQL.

J'ai installé le plugin MySQL pour Visual Studio 1.1.1 et le connecteur MySQL .Net 6.8.3.

Le problème est que lorsque j'essaie de créer un nouveau modèle ADO.NET Entity, je ne peux pas choisir MySQL pour la connexion.

enter image description here

Mais si je crée une connexion à partir de l'outil de connexion de Visual Studio, je peux voir MySQL

enter image description here

Cela signifie que la version actuellement installée n'est pas compatible avec entity framework 6. Comment est-ce possible après avoir installé le dernier connecteur et le plug-in. Y a-t-il autre chose à faire?

Merci

EDIT

J'ai fait une nouvelle installation de MySQL sans installer le connecteur par défaut, puis j'ai installé le 6.8.3 et le plugin pour Visual Studio.

Ensuite, je peux voir la connexion que j'ai établie pour mon modèle d'entité, mais lorsque je suis sur le point de choisir la version de l'entité, je reçois ce message.

enter image description here

54
Marc

LATEST EDIT

Le bug a été corrigé.

Commentaire de Chris:

07/11/2015 et vous pouvez maintenant le faire fonctionner sans éditer de fichiers ni faire d'étranges choses. Utilisez le programme d’installation MySQL pour Windows et incluez le support Visual Studio et le dernier Connector.Net. Assurez-vous de mettre à jour après l'installation et vous obtiendrez la dernière de chaque (1.2.5 et 6.9.8). Utilisez NuGet pour installer EntityFramework, MySql.Data et MySql.Data.Entity. Enfin, construisez et profitez de la qualité de la rétroingénierie d'abord en ajoutant un modèle d'entité Ado.Net.

Réponse originale

J'ai découvert qu'il s'agissait d'un bogue de MySQL.

Voici le lien expliquant une zone de travail.

Sur votre machine où VS 2013 est installé, plug-in VS (1.1.3 GA) et Connector/Net

Fermez toutes les instances de VS avant de suivre les étapes.

Dans une fenêtre de l’explorateur Windows, accédez à ce chemin ou à l’endroit où vous avez installé vos fichiers binaires Connector/Net.

C:\Program Files (x86)\MySQL\Connecteur MySQL Net 6.8.3\Assemblies\v4.5 \

Copiez le fichier:

MySql.Data.Entity.EF6.dll

Et le coller dans ce dossier

C:\Fichiers de programme (x86)\Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies

S'il vous demande de l'écraser, veuillez le faire.

Vous aurez besoin de droits d'administrateur pour écraser le fichier.

Ensuite, vous pouvez essayer à nouveau de générer le script pour votre modèle.

Il est important que la version 1.1.3 du plug-in VS soit installée, car cette solution de contournement est pour cela.

Malheureusement, cela ne fonctionne pas pour moi, alors j'ai rétrogradé dans le framework d'entités 5 jusqu'à ce qu'ils résolvent ce problème.

[~ # ~] éditer [~ # ~]

Enfin, cela fonctionne maintenant.

J'ai dû ajouter les 3 DLL suivantes:

  • C:\Program Files (x86)\MySQL\Connecteur MySQL Net 6.8.3\Assemblies\v4.5\MySql.Data.dll
  • C:\Program Files (x86)\MySQL\Connecteur MySQL Net 6.8.3\Assemblies\v4.5\MySql.Data.Entity.EF6.dll
  • C:\Program Files (x86)\MySQL\Connecteur MySQL Net 6.8.3\Assemblies\v4.5\MySql.Web.dll

Ensuite, j'ai modifié la partie EntityFramework de la configuration Web en:

<entityFramework codeConfigurationType="MySql.Data.Entity.MySqlEFConfiguration, 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" /> 
    </providers>
  </entityFramework>

N'oubliez pas de [~ # ~] reconstruire [~ # ~] et vous devriez pouvoir créer un modèle de structure d'entité 6 avec MySQL.

[~ # ~] important [~ # ~]

Assurez-vous d’avoir installé MySQL pour Visual Studio 1.1.3 et le connecteur MySQL .net 6.8.3

54
Marc

SOLUTION! 2017

Installer le paquet Nuget:

Install-Package EntityFramework
Install-Package MySql.Data.Entity -Version 6.9.9

Installez MySQL pour Visual Studio 1.2.6 - https://dev.mysql.com/downloads/windows/visualstudio/

Changements dans Web.Config

<EntityFramework>

à:

<EntityFramework codeConfigurationType = "MySql.Data.Entity.MySqlEFConfiguration, MySql.Data.Entity.EF6">

Ajouter (** vos informations **):

<connectionStrings>
<add name="**YourContextName**" connectionString="server=**xxx.xxx.xxx.xxx**;port=3306;user id=**your user**;password=**your password**;database=**your database**" providerName="MySql.Data.MySqlClient" /></connectionStrings>


Redémarrez Visual Studio

Mes paramètres:
- Microsoft Visual Studio Community 2015
- Dot Net Framework 4.5.2
- Asp.Net MVC 5.2.3.0
- MySql Server 5.6

10
Edvaldo Silva

Je ne sais pas si cela vous pose toujours un problème, mais aucune des solutions ci-dessus n'a fonctionné pour moi… jusqu'à ce que je découvre ceci:

http://www.Microsoft.com/en-us/download/details.aspx?id=40762

Après avoir appliqué les correctifs (à la fois pour VS2013 et VS2012), VS2013 fonctionnait à merveille avec EF6 pour MySql.

ps. Versions du paquet installées (de NuGet):
EntityFramework - 6.1.3 (03/10/2015)
MySqlData - 6.9.6 (24/02/2015)
MySql.Data.Entity - 6.9.6 (24/02/2015)
MySql.Web - 6.9.6 (24.02.2015)

NuGet fait le travail correctement et met à jour Web.Config en conséquence, en remplissant la section "entityFramework" avec tout le nécessaire.

Pour VS2013, cela passe simplement de "Ne fonctionne pas du tout" à "Entièrement fonctionnel". Pour VS2012, il est possible d'utiliser "Code First from Database", qui n'était pas disponible avant l'application du correctif.

J'aurais aimé trouver cela il y a environ 10 jours. J'espère donc que cela pourra encore vous aider.

6
awerdan

Pour moi, réinstaller MySQL et utiliser la version du connecteur installé comme référence dans Visual studio a fonctionné!

Pas:

  1. Réinstallez MySQL Tools avec le dernier connecteur MySQL stable pour Windows.
  2. Ajoutez ces 3 fichiers comme référence dans Visual Studio:

  3. MySql.Data.dll

  4. MySql.Data.Entity.EF6.dll
  5. MySql.Web.dll

  6. Modifier le fichier Web.config suivant à partir de

      <providers>
        <provider invariantName="System.Data.SqlClient"  type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
     </providers>
    

À:

 <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" />
</providers>

Assurez-vous que votre nom d'utilisateur/mot de passe/nom de la connexion est correct, sinon Visual Studio risque de se bloquer. (Est arrivé avec moi.)

2
Shyamal Parikh

FYI pour tous ceux qui utilisent une solution multi-projets, si vous ne pouvez pas exécuter votre projet d'interface graphique en raison de problèmes de recherche/chargement du fournisseur MySql EF6, tels que:

Aucun fournisseur Entity Framework trouvé pour le fournisseur ADO.NET avec le nom invariant 'MySql.Data. (...)'. Assurez-vous que le fournisseur est enregistré dans la section 'entityFramework' du fichier de configuration de l'application. Voir http://go.Microsoft.com/fwlink/?LinkId=260882 pour plus d'informations.

s'il vous plaît voir cette question .

Même s’il s’agit de SqlServer, le problème pourrait être le même: si un seul de vos projets gère les opérations de base de données, vous avez probablement ajouté Nuget References à MySql.Data et MySql.Data.Entity et EntityFramework à ce projet. Puisque MySql.Data et EntityFramework sont utilisés directement par le code, le processus de construction est suffisamment intelligent pour les copier dans le dossier de sortie et pour le copier une seconde fois dans le dossier de sortie du projet GUI.

Cependant, depuis MySql.Data.Entity n'est désigné que par le app.config ou web.config fichier texte , le processus de construction pense que cette référence n’est pas nécessaire ( le code ne l'utilise pas!) et le dépouille, et vous ne verrez pas MySql.Data.Entity.EF6.dll dans le répertoire de sortie du projet GUI, ce qui empêche le projet GUI de trouver ce fournisseur.

Donc - deux options - assurez-vous que quelque chose copie DLL dans le cadre du processus de construction (événement avant/après la construction, constructeur de package de déploiement, tâche CI, tâche humaine, etc.), ou tout simplement Faites directement référence à l’assemblage dans votre projet DB/EF6.

0
quetzalcoatl

Mise à jour 2015-11-07

Les bugs sont corrigés et vous pouvez maintenant le faire fonctionner sans modifier aucun fichier ni même référencer des assemblys en dehors de NuGet. Vous devez simplement installer la bonne chose et ajouter les bons paquets NuGet. Voici comment:

Utilisez le programme d’installation MySQL pour Windows et incluez le support Visual Studio et le dernier Connector.Net. Assurez-vous de mettre à jour après l'installation et vous obtiendrez la dernière de chaque (1.2.5 et 6.9.8).

Ensuite, utilisez NuGet pour installer EntityFramework, MySql.Data et MySql.Data.Entity.

Enfin, créez et profitez de la qualité du reverse engineering code-first en ajoutant un modèle d'entité Ado.Net.

0
Chris

Avez-vous essayé d'installer le dernier connecteur point net pour mon sql? http://dev.mysql.com/tech-resources/articles/mysql-installer-for-windows.html ou http://dev.mysql.com/downloads/connector/net / selon votre contexte.

0
To delete profile

Mon faisait face au même problème.

J'ai fait ce qui suit:
1. Installez MySQL pour Visual Studio à partir de:
https://dev.mysql.com/downloads/windows/visualstudio/
2. Installer MySql.Data dans mon projet
3. Installer MySql.Data.EntityFramework dans mon projet

0
Geovanny López

j'ai trouvé ceci sur le mySQL Bucktracker

Essayez la solution suivante ....

Exécutez la commande suivante sur la base de données MySQL, puis essayez si cela fonctionne.

set global optimizer_switch = 'dérivé_merge = désactivé'

J'ai également ajouté les assemblys suivants:

  • EF6 comme paquet Nuget
  • MySQL.Data
  • MySql.Data.Entity.EF6.dll
  • MySQL.Web (pas sûr si vraiment nécessaire)
0
Hans Vader