Entity Framework 5.0 code-première avec MySQL Connector 6.6.5.0 .Net 4.5
Pour la vie de moi, je ne peux pas obtenir mon C# WinApp de travailler avec Entity Framework 5.0 avec une base de données de MySql utilisation de MySql connector 6.6.5.0 (MySql.Data
de référence) et MySql Entité 6.5.4.0 (MySql.Data.Entity
de référence). À l'aide de .Net Framework 4.5 sur Visual Studio 2012. Au moment d'écrire ces lignes, les versions ci-dessus sont toutes les dernières stables.
Voici ce que j'ai sur l'app.config
<?xml version="1.0" encoding="utf-8"?>
<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=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<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" />
</DbProviderFactories>
</system.data>
<connectionStrings>
<add name="MyConnectionName"
connectionString="Server=mysql13.myserver.com.br;Database=mydb;User Id=username;Pwd=pa$$w0rd;"
providerName="MySql.Data.MySqlClient" />
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data">
</defaultConnectionFactory>
</entityFramework>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.6.5.0" newVersion="6.6.5.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
Dans le code
De l'utilisateur de la classe
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public virtual List<Permission> Permissions { get; set; }
public User()
{
Permissions = new List<Permission>();
}
}
public class Permission
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}
public class UserContext : DbContext
{
public DbSet<User> Users { get; set; }
public DbSet<Permission> Permissions { get; set; }
}
La création d'un nouvel enregistrement
using (var db = new UserContext())
{
Permission permission1 = new Permission() { Name = "Permission 1", Description = "The desc 1" };
Permission permission2 = new Permission() { Name = "2nd Perm", Description = "Desc2" };
User user = new User() { Name = "Joao" };
user.Permissions.Add(permission1);
user.Permissions.Add(permission2);
db.Users.Add(user);
db.SaveChanges();
}
Et je reçois l'exception à la ligne db.Users.Add(user);
System.InvalidOperationException was unhandled
HResult=-2146233079
Message=Failed to set Database.DefaultConnectionFactory to an instance of the 'MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data' type as specified in the application configuration. See inner exception for details.
Source=EntityFramework
StackTrace:
at System.Data.Entity.Internal.AppConfig.<.ctor>b__1()
at System.Lazy`1.CreateValue()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Lazy`1.get_Value()
at System.Data.Entity.Internal.AppConfig.get_DefaultConnectionFactory()
[removing the rest of the stack]
InnerException: System.InvalidCastException
HResult=-2147467262
Message=Unable to cast object of type 'MySql.Data.MySqlClient.MySqlClientFactory' to type 'System.Data.Entity.Infrastructure.IDbConnectionFactory'.
Source=EntityFramework
StackTrace:
at System.Data.Entity.Internal.AppConfig.<.ctor>b__1()
InnerException:
J'ai essayé plusieurs choses, y compris l'ajout de Culture=neutral, PublicKeyToken=c5687fc88969c44d
dans le DbProviderFactories
section en vain..
J'ai ajouté de l'Entity Framework, MySql Connecteur de Données et MySql.Les données.Entité à l'aide de Gestionnaire de Package NuGet.
J'ai vu bien d'autres postes avec un problème similaire, mais ne peut pas trouver une solution claire, surtout avec la gestion des versions combo EF 5 + MySql Connector 6.6.5.0.
Quelqu'un a fait ce travail? Vous pouvez poster à la fois l'application.config ET le code pour le faire fonctionner?
Oh, et supprimer le EntityFramework section.
Merci Aron, je vais donner un coup de cette. Et vous pensez que la mise en œuvre est brisé en fonction de votre expérience? Je pense à mon application va avoir au plus simple des requêtes de jointure, rien de trop compliqué.. pense toujours que c'est mieux si je n'ai pas utilisé EF avec MySql?
Même "pas très compliqué" requêtes que j'ai trouvé pour produire des résultats inattendus. Le pire de ce qui est l'endroit où il produit
SELECT * FROM (SELECT * FROM foo) ORDER BY BAR
. Qui MySQL ne permet pas d'optimiser la requête (à tous) correctement.Si vous avez besoin d'EF je vous conseille tout de la base de données qui n'est pas MySQL ou SQLite.
OriginalL'auteur Joao Coelho | 2013-05-07
Vous devez vous connecter pour publier un commentaire.
Le MySQL Connector 6.6.5 prend uniquement en charge les Entity Framework 4.3 comme mentionné ici. J'ai personnellement utilisé ce qui a bien fonctionné jusqu'à présent. Toutefois, si vous avez besoin d'Entity Framework 5 en particulier, vous devez utiliser MySQL Connector 6.6.7 Bêta, qui prend désormais en charge comme mentionné ici. Je n'ai pas essayé v 6.6.7.
Mise à jour 1: Vous pouvez trouver le blog de l'utilisation de EF 4.3 code-première avec MySQL Connector 6.6 ici.
Mise À Jour 2: L'Échantillon .NET 4.5 application de console à l'aide de EF 4.3 et MySql Connector 6.6.5 ici.
Je crois 6.6.4 ne prend pas en charge EF5.
Encore une fois...je réitère. Je suis actuellement en utilisant EF 5 avec MySQL 6.6.4 connecteur dans un environnement de production.
Mon mauvais. Puis-je vous demander comment vous le faites?
Fonctionne hors de la boîte. Le seul problème est que le Linq fournisseur de produit SQL que MySQL ne peut pas optimiser.
OriginalL'auteur cubski
Sonne comme il y a un peu étrange résolution de l'assemblée questions. Essayez de supprimer le
assemblyBinding
élément dans votre fichier de config, puis exécutez NuGet estAdd-BindingRedirect
commande.OriginalL'auteur bricelam
La plupart de mes web de production.config. J'ai sorti tous les société de choses spécifiques,...
Aussi cette config a été mis en place pour MVC4/EF5/OData 5.2 avec la compression IIS. Assez compliqué tout ça...il n'est pas nécessaire. Mais j'ai pensé que vous vouliez mon cru config de référence.
OriginalL'auteur Aron
Je suis tombé sur le même problème dans mon premier jour d'utilisation de mysql en EF. Et j'ai trouvé la config est incorrect, et il devrait être
Et assurez-vous que vous utilisez .net framework 4.5 et mysql connector lib .net 4.5 ainsi pour EF 5, depuis le connecteur pour .net 4 prend en charge uniquement EF 4.4.
OriginalL'auteur ZZZ