web-dev-qa-db-fra.com

Activer Entity Framework 6 pour MySQL (C #) dans WinForms de Microsoft Visual Studio 2013

Hier, je savais qu'Entity Framework était une autre méthode d'accès à la base de données en plus de l'utilisation de Dataset ou de DataReader, puis j'ai essayé de faire en sorte qu'Entity Framework 6 fonctionne pour mon serveur de base de données MySql dans MVS 2013.

J'ouvre un WinForms avec .Net FrameWork 4.5.1. (Je n'ai donc que App.config mais pas app/web config dans le projet) Après avoir installé mysql-installer-communauté-5.7.3.0-m13.msi et

installer le package EntityFramework via

Menu OUTILS -> Gestionnaire de paquets de bibliothèque -> Gérer les paquets NuGet pour la solution ... -> En ligne -> (Rechercher) EntityFramework (méfiez-vous de la version de ce paquet qui devrait être de la version 6.0.2. Sinon, cliquez sur Mises à jour -> EntityFramework mettre à jour)

Quand j'ai essayé d'ajouter ADO.NET Entity Data Model via

Cliquez avec le bouton droit sur Projet -> Ajouter -> Nouvel élément -> Modèle de données d'entité ADO.NET -> Générer à partir de la base de données -> Nouvelle connexion -> Sources de données: -> Modifier ...-> Base de données MySQL -> Entrez le nom du serveur avec Adresse IP, nom d'utilisateur et mot de passe du serveur -> Choisissez le nom de la base de données-> Tester la connexion -> OK

Ensuite, la chaîne de connexion d'entité est générée -> Cochez Enregistrer les paramètres de connexion d'entité dans App.Config en tant que -> Suivant> ->

Quelle version de Entity Framework voulez-vous utiliser? Avoir l'option Entity Framework 6.0 mais vous ne pouvez pas l'utiliser parce que

"Votre projet fait référence à la dernière version d'Entity Framework; toutefois, aucun fournisseur de base de données Entity Framework compatible avec cette version n'a été trouvé pour votre connexion de données. Quittez cet assistant, installez un fournisseur compatible et confirmez votre projet avant d'exécuter cette action".

Comment résoudre ce problème?

En passant, si vous installez Entity Framework version 5 dans Nuget Package, l'option d'Entity Framework 5.0 peut être sélectionnée ici et vous pouvez réussir à utiliser Entity Framework 5, mais pas la version 6.

43
V-SHY

Tout d’abord, nous n’avons même pas besoin de pour installer la communauté mysql-installer - - 5.7.3.0-m13.msi.

  1. Installez le dernier mysql-visualstudio-plugin
  2. Installez la dernière version mysql-connector-net
  3. Nouveau C # .Net 4.5 Framework WinForms (pour 4.0 il devrait fonctionner en fonction on Entity Framework 6 prend-il en charge .NET 4.0? )
  4. Installez 4 Nuget Packages (suivez la séquence, si vous installez Mysql.Data.Entities avant EntityFramework, il résoudra la dépendance et installera EntityFramework 6.0.2 mais ce dont nous avons besoin est EntityFramework 6.1.0 )

Cadre d'entité

Mysql.Data

Mysql.Data.Entities

Mysql.Web

5.Si vous avez balise entityFramework dans App.config , veuillez commenter. et insérez une nouvelle balise entityFramework dans App.config après le démarrage de la balise

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

6.Ajouter Modèle de données d'entité ADO.NET (comme indiqué dans la question)

7.After La chaîne de connexion d'entité est générée (comme indiqué dans la question) et cochez Enregistrer les paramètres de connexion d'entité dans App.Config en tant que cliquez sur Suivant.

8. Choisissez votre objet de base de données et vos paramètres (Tableaux, Vues ou Procédures et fonctions stockées) (Vous n'avez pas "Quelle version d'Entity Framework voulez-vous utiliser?" Car je l'ai un seul fournisseur Entity Framework 6.0 donc direct ignorer la sélection si mon seul fournisseur est valable)

9.Finish

Félicitations ^^

Au fait, vous devrez peut-être ajouter les fichiers .dll

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

dans ce dossier

C:\Program Files\MySQL\Net Connector Net 6.8.3\Assemblies\v4.5 (fenêtres 32 bits)

C:\Program Files (x86)\MySQL\Connecteur MySQL Net 6.8.3\Assemblies\v4.5 (fenêtres 64 bits)

comme référence de votre projet pour d’autres fonctions EF6.

87
V-SHY

J'ai suivi les instructions données par V-Shy et avais le même problème que LaRae White avec le sorcier qui s'est arrêté sur moi. J'utilise VS2015 et je viens d'utiliser le programme d'installation MySql pour mettre à jour MySQL pour Visual Studio 1.2.6 et Connector/NET v6.9.8.

Ce que j'ai finalement fait pour que cela fonctionne est le suivant:

  1. Désinstallez tous les packages que j'avais précédemment installés pour résoudre ce problème (EntityFramework, Mysql.Data, Mysql.Data.Entities, Mysql.Web).
  2. Ajout manuel des références suivantes trouvées dans C:\Program Files (x86)\MySQL\Connector.NET 6.9\Assemblies\v4.5: MySql.Data.dll, MySql.Data.Entity.EF6.dll et MySql.Web. dll

J'espère que ça aide quelqu'un.

11
ih303

Le correctif est le suivant:

  1. Installer le plugin MySQL Visual Studio
  2. Installer le connecteur MySQL pour .NET
  3. Ajoutez des références dans le projet à partir d'assemblages MySQLConnector dans Program Files.
  4. Supprimer l'ancien code de App.Config ou Web.Config

    <entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> <parameters> <parameter value="mssqllocaldb" /> </parameters> </defaultConnectionFactory> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> </providers> </entityFramework>

  5. Remplacez-le par le code ci-dessous:

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

  6. Reconstruisez le projet et essayez d’ajouter un nouveau ADO .NET Entity Data Model

4
Dharmendra Jadon

Je passe toute la journée à chercher comment résoudre ce problème et rien n’aide. Apparemment, je découvre 1 choses dont les gens ne parlent pas

Les propriétés model.edmx contiennent un "Modèle de génération DDL" complet. Par défaut, il est défini sur "SSDLToSQL10.tt (VS)" mais doit être défini sur "SSDLToMySQL.tt (VS)".

De plus, il produisait également une erreur:

Exécution de la transformation: System.NullReferenceException: la référence à un objet n'est pas définie sur une instance d'un objet.
bla bla bla
ligne 93 c:\Fichiers de programme (x86)\Outils Visual Framework 12.0\Common7\IDE\Extensions\Microsoft\Entity\DBGen\SSDLToMySQL.tt

Ce qui me mène à la bogue officiel de "MySQL pour Visual Studio 1.1.3" qui sera corrigé dans la prochaine version 1.1. .4 qui n'est pas disponible jusqu'à présent.

Cependant, il existe un correctif:
Remplacez le "MySql.Data.Entity.EF6.dll" dans
C:\Fichiers de programme (x86)\Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies
par fichier à partir de NET Connector dans
C:\Fichiers de programme (x86)\MySQL\Connecteur MySQL Net 6.8.3\Assemblies\v4.5 \

4
Briksins

J'ai eu le même problème et j'ai essayé diverses corrections comme celles présentées ici, ainsi que celles du forum MySQL, mais je ne pouvais toujours pas mettre à jour mon EDMX.

Après un certain temps (terriblement de longues heures), j'ai réussi à faire fonctionner ce problème avec VS 2013 Update 3, connecteur .Net 6.9.4, Mysql pour VS 1.2.3 pour mon application MVC.

Tout d’abord, j’ai essayé une machine toute neuve, tout a fonctionné avec une installation simple de VS suivi du connecteur et de Mysql pour VS. Ensuite, j'ai aussi essayé avec un ancien VS 2012 et cela a également fonctionné. J'avais déjà écrit des projets avec EF5 sur ma machine et je supposais que les anciens fichiers EF5 pouvaient interférer avec ceux de EF6.

Voici donc ce que j'ai fait, mais vous devez garder à l'esprit qu'il s'agit d'un problème lié à la machine et que je vous donne une liste de toutes les choses que j'ai essayées en désespoir de cause:

  1. Supprimez tous les MySql. *. Dll du dossier C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies

  2. Écraser MySql.Data.Entity.dll dans le dossier C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\PublicAssemblies par celui du dossier Connector

  3. Désinstallez EntityFramework de votre projet dans la console Nuget, puis rétrogradez à EF 6.0.0: Install-Package EntityFramework -ProjectName YourProject -version 6.0.0

  4. Ajoutez la référence à MySql.Data.Entity.EF6 non pas avec Nuget, mais en référençant directement le fichier (C:\Program Files (x86)\Net MySQL\MySQL Connector Net 6.9.4\Assemblies\v4.5\MySql.Data.Entity .EF6.dll)

Mon fichier app.config ressemble à ceci

<configuration>
    <configSections>
        <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    <!-- For more information on Entity Framework configuration, visit http://go.Microsoft.com/fwlink/?LinkID=237468 --></configSections>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
    <entityFramework>
        <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
        <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>
    <connectionStrings>
        <!-- your connection string here -->
    </connectionStrings>
</configuration>

Et les références ajoutées dans le projet sont ces trois

  • Cadre d'entité
  • EntityFramework.SqlServer
  • MySql.Data.Entity.EF6

Certaines étapes ont peut-être été inutiles, mais je peux enfin mettre à jour mon fichier EDMX et, bien entendu, créer et exécuter le projet Web et VS ne semble pas affecté par la suppression des DLL MySql. J'espère que ça aide.

2
JJP

Assurez-vous que votre DbContext possède l'annotation indiquée dans la documentation MySQL:

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

Je n'arrêtais pas de constater que mon base de données en premier ASP.NET MVC me permettait de mettre à jour mon fichier EDMX jusqu'à ce que je le sorte du contrôle de code source sur un autre ordinateur.

J'espère que cela aidera quelqu'un qui ne peut pas mettre à jour son EDMX ou trouve l'erreur lors de l'utilisation de MySQL avec Entity Framework 6, car je continuais à être confronté à la même erreur jusqu'à ce que j'ajoute l'annotation.

2
Luke

J'ai eu le même problème aussi. Dans mon cas, je devais:

  • Rebuild le projet après l'ajout de packages avant de lancer l'assistant d'ajout de modèle.
  • Désinstallez la dernière version du package de structure d'entités et revenez à la version 6.0.0.0.
  • PAS installez Mysql.Data.Entities.EF6 après avoir installé Mysql.Data.Entities !!
  • Modifiez le fichier de configuration de sorte que le fournisseur n seul MySql.Data.MySqlClient se trouve à l'intérieur des fournisseurs et qu'il aurait dû inclure la version suivante:

    <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.9.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
    </providers>
    
2
Hamed

Aucune de ces réponses ne l'a résolu pour moi. La seule chose qui a fonctionné a été d'installer le paquet MySql.Data.EntityFramework NuGet. J'ai redémarré VS, reconstruit et j'ai ensuite pu passer à travers l'assistant. (WPF dans VS2017 15.8.7).

1
jweaver

J'ai un problème similaire avec VS2013 Community, mais le mien n'est pas WinForm mais ASP.NET MVC. Après avoir suivi toutes les solutions ci-dessus et mes problèmes sont toujours là, mais ils (surtout Hamed) m'ont donné quelques idées pour résoudre ce problème.

Donc, si vous faites encore défiler ici, cela vous donnera peut-être aussi une idée. J'ai:

  1. Connecteur MySQL NET installé 6.8.4 (6.9.5 ne semble pas fonctionner).
  2. Laissé MySQL pour VS 1.2.3 en l'état (inutile d'installer la 1.1.1 car la 1.2.3 a fonctionné).
  3. MySQL.data Mysql.Data.entities installé de NuGet.
  4. Suppression de tous les fichiers MySQL.dll de D:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies.
  5. Fait comme l'a dit Hamed.
  6. Solution reconstruite.
  7. Ajout du nouveau modèle d'entité ADO.NET avec succès.

J'espère que cette aide.

1
Vinh V

J'ai eu des problèmes comme ih303. Comment j'ai résolu le problème:

- Solution de suivi V-SHY

-Si il n'y a pas de message d'erreur ou quoi que ce soit du genre, l'assistant s'en va tout simplement -> faire la solution suivante (qui a fonctionné pour moi):

au lieu de mettre en:

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

changez le en suivant:

    <entityFramework>
      <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
        <parameters>
          <parameter value="mssqllocaldb" />
        </parameters>
      </defaultConnectionFactory>
      <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>

reconstruire -> ajouter un assistant et ainsi de suite -> devrait fonctionner.

1
mRozwold

Après avoir lutté pendant des heures au cours des deux derniers jours, ce qui m'a finalement aidé, c'est de rétablir l'intégralité de mon code dans l'ancien code EF5, de supprimer le modèle de données ADO .NET Entity et de le rajouter - SANS choisir l'entité framework 6.0 (qui a été désactivée), mais en choisir la version 5.0, à cause du dernier connecteur mysql, du plugin visual studio et de tous les autres éléments que j'ai installés en tant que mentionné ci-dessus, visual studio a automatiquement ajouté Entity Framework 6.0 ADO ignorant ma "sélection". J'ai ensuite ajouté manuellement toutes les références dans le projet le demandant (EntityFramework, mysql.data , mysql.data.entity.EF6 ver 6.9.6) et enfin cela fonctionne.

1
Gil Cohen

J'ai réussi à le faire fonctionner en supprimant les références pour:

MySql.Data.Entity.EF6
MySql.Data

Et à la place j'ai installé le Nuget

MySql.Data.Entity

Cela n'a pas seulement ajouté des références aux frameworks supprimés ci-dessus, mais il a également apporté des modifications de configuration au projet. Après avoir installé le nuget, j'ai également reconstruit le projet afin que les fichiers dll soient ajoutés au répertoire bin.

1
andrei

Lorsque nous ajoutons l'élément ADO.NET Entity Data Model avec la connexion Oracle, le message d'erreur suivant s'affiche: "Votre projet fait référence à la dernière version d'Entity Framework ...".

Les étapes de résolution sont ici;

  1. Installer Oracle ODTwithODAC122010 en tant que 32 bits

  2. Créez votre projet dans VS2017

  3. Changez la plateforme de solution active en 32 bits à partir de AnyCPU

  4. Ouvrez Outils-> Nuget PackageManager-> Gérer les packages de nugets pour la solution.

  5. Écrire Parcourir la zone "ODP" et installer le programme suivant

Oracle. ManagedDataAccess et Oracle.ManagedDataAccess.EntityFramework

6.Open Tools-> Nuget PackageManager-> Console du gestionnaire de packages

7. Écrire ce paquet d'installation EntityFramework - Version 6.1.1 et entrer

8. Redémarrez Visual Studio pour terminer le processus.

9.Re-Build votre application

  1. Ajouter un nouvel élément ADO.NET Entity Data Model

11.Si nécessaire Ajouter une nouvelle connexion à Oracle (source de données = base de données Oracle (ODP.NET, pilote géré))

12. Tout va bien.

Remarque: EF 6.1.3 ne fonctionne pas avec VS2017 et Oracle ODTwithODAC122010. Mais après tout ce processus, j'ai changé EF en EF6.1.3, mais cela fonctionne. Mais je ne vous conseille pas.

0
Mehmet Kurt

Pour moi, cela semble avoir quelque chose à voir avec les pilotes de base de données 32 bits VS 64 bits.

Au moins à ce stade, je peux basculer entre avoir cette erreur et ne pas avoir cette erreur en modifiant ma configuration en x64. Essayer n'importe quel processeur ne fonctionne pas, et essayer x86 ne fonctionne pas.

Je ne sais pas trop où choisir d'utiliser des pilotes MySQL 32 ou 64 bits; l'installateur prétend installer les deux.

(J'avais également besoin d'ajouter un ou plusieurs des packages NuGet MySql.Data, MySql.Data.Entity, et MySql.Data.Entities, ainsi que EntityFramework.)

Une fois que le modèle a été ajouté à mon projet, j'ai pu revenir au projet x86 sans aucun problème jusqu'à présent.

0
Dave Cousineau