2008-09-16 5 views
253

Impossible de trouver quelque chose de pertinent sur Entity Framework/MySQL sur Google, donc j'espère que quelqu'un le sait.Utiliser MySQL avec Entity Framework

+8

pour parler franchement, le support MySQL pour LINQ est de la merde! Je me bats la tête sur des problèmes mineurs pour la dernière semaine: | ... – effkay

+1

avez-vous utilisé dblinq http://code.google.com/p/dblinq2007/? – Sharique

Répondre

4

Vous auriez besoin d'un fournisseur de mappage pour MySQL. C'est une chose supplémentaire dont Entity Framework a besoin pour faire de la magie une réalité. This blog parle d'autres fournisseurs de cartographie en plus de celui fourni par Microsoft. Je n'ai trouvé aucune mention de MySQL.

+0

Oui, vous avez raison. J'espérais qu'il y avait quelque chose de prêt en ce moment. – vintana

7

Ce n'est pas sur la SP et ce qu'ils vouloir. Ils ont créé un système ouvert pour que les autres puissent brancher les 'fournisseurs' - postgres et sqlite l'ont - mysql est juste laggin ... mais, bonne nouvelle pour ceux qui sont intéressés, moi aussi je cherchais ça et j'ai trouvé que le MySql Connector/net 6.0 aura ... vous pouvez le vérifier ici:

http://www.upfromthesky.com/blog/post/2009/03/24/MySql-Supports-the-Entity-Framework.aspx

+1

Je me demande ce que "initial" signifie quand ils ont dit "Initial Entity Framework". – vintana

187

Il a été publié - Obtenez le MySQL connector for .Net v6.5 - ce qui a le soutien pour [Entity Framework]

J'attendais ce tout le temps, même si le support est de base, qui fonctionne pour la plupart des scénarios de base de l'interaction db. Il a également l'intégration de base de Visual Studio.

MISE À JOUR http://dev.mysql.com/downloads/connector/net/ partir de la version 6.7, connecteur/Net ne comprendra plus le MySQL pour l'intégration de Visual Studio. Cette fonctionnalité est maintenant disponible dans un produit distinct appelé MySQL pour Visual Studio disponible à l'aide du programme d'installation de MySQL pour Windows (voir http://dev.mysql.com/tech-resources/articles/mysql-installer-for-windows.html).

+0

Merci pour la mise à jour, j'attendais la même chose! –

+0

Merci pour l'info! – Rich

+4

Je pensais que je mentionnerais que la dernière version est disponible ici (6.2.2 actuel): http://www.mysql.com/downloads/connector/net –

2

Vintana,

Od Bien sûr, il y a quelque chose maintenant prêt. http://www.devart.com/products.html - c'est commercial bien (vous avez un essai IIRC 30days). Ils gagnent leur vie en écrivant des fournisseurs, donc je suppose que cela devrait être rapide et stable. Je connais de très grandes entreprises qui utilisent leur fournisseur Oracle au lieu de Orace et MS.

+0

Merci pour votre réponse. @Vintana, vous pouvez trouver plus d'informations sur dotConnect pour MySQL et ses avantages ici http://www.devart.com/dotconnect/mysql/. Pour améliorer votre travail avec les entités Entity Framework, nous fournissons un outil avancé pour la création de modèles visuels - Entity Developer http://www.devart.com/entitydeveloper/. – Devart

1

This MySQL tutorial montre comment générer et utiliser des entités EF en tant que source de données pour un contrôle.

+3

Lien est cassé, le tutoriel peut être trouvé [ici] (http://dev.mysql.com/doc/refman/5.6/en/connector-net-tutorials-entity-framework-winform-data-source.html) . –

+0

Déplacé [nouveau] (https://dev.mysql.com/doc/connector-net/en/connector-net-tutorials-entity-framework-winform-data-source.html). –

1

Faites attention en utilisant le connecteur .net, le connecteur 6.6.5 ont un bug, il ne fonctionne pas pour insérer des valeurs TinyInt comme identité, par exemple:

create table person(
    Id tinyint unsigned primary key auto_increment, 
    Name varchar(30) 
); 

si vous essayez d'insérer un objet comme celui-ci:

Person p; 
p = new Person(); 
p.Name = 'Oware' 
context.Person.Add(p); 
context.SaveChanges(); 

Vous obtiendrez une exception référence nulle :

Referencia a objeto no establecida como instancia de un objeto.: 
    en MySql.Data.Entity.ListFragment.WriteSql(StringBuilder sql) 
    en MySql.Data.Entity.SelectStatement.WriteSql(StringBuilder sql) 
    en MySql.Data.Entity.InsertStatement.WriteSql(StringBuilder sql) 
    en MySql.Data.Entity.SqlFragment.ToString() 
    en MySql.Data.Entity.InsertGenerator.GenerateSQL(DbCommandTree tree) 
    en MySql.Data.MySqlClient.MySqlProviderServices.CreateDbCommandDefinition(DbProviderManifest providerManifest, DbCommandTree commandTree) 
    en System.Data.Common.DbProviderServices.CreateCommandDefinition(DbCommandTree commandTree) 
    en System.Data.Common.DbProviderServices.CreateCommand(DbCommandTree commandTree) 
    en System.Data.Mapping.Update.Internal.UpdateTranslator.CreateCommand(DbModificationCommandTree commandTree) 
    en System.Data.Mapping.Update.Internal.DynamicUpdateCommand.CreateCommand(UpdateTranslator translator, Dictionary`2 identifierValues) 
    en System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator translator, EntityConnection connection, Dictionary`2 identifierValues, List`1 generatedValues) 
    en System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter) 
    en System.Data.EntityClient.EntityAdapter.Update(IEntityStateManager entityCache) 
    en System.Data.Objects.ObjectContext.SaveChanges(SaveOptions options) 
    en System.Data.Entity.Internal.InternalContext.SaveChanges() 
    en System.Data.Entity.Internal.LazyInternalContext.SaveChanges() 
    en System.Data.Entity.DbContext.SaveChanges() 

Jusqu'à présent, je ne l'ai pas trouvé une solution, je devais changer mon identité tinyint à l'identité unsigned int, ce a résolu le problème, mais ce n'est pas la bonne solution.

Si vous utilisez une ancienne version de Connector.net (j'ai utilisé 6.4.4), vous n'aurez pas ce problème.

Si quelqu'un connaît la solution, s'il vous plaît contactez-moi.

À la votre!

Oware

+0

L'erreur est renvoyée car p est null. Vous devez d'abord créer une nouvelle instance vide de l'objet. I.e. Personne p = new Person(); not Personne p; Donc: 'Personne p = new Person() {Name = "Oware"}; context.Person.Add (p); context.SaveChanges(); ' – Dave

+0

désolé j'ai oublié d'ajouter la nouvelle ligne, même si j'ajoute la nouvelle ligne, l'erreur apparaît toujours – oware

+0

Le bug est corrigé dans la version 6.8.2. http://bugs.mysql.com/bug.php?id=70888 Connector/Net 6.8.3 est libéré. http://dev.mysql.com/downloads/connector/net/ –

0

Si vous souhaitez exécuter Entity Framework avec MySql sur mono/linux/macos, cela pourrait être utile https://iyalovoi.wordpress.com/2015/04/06/entity-framework-with-mysql-on-mac-os/

+0

L'utilisation de MYSQL avec EF s'améliore-t-elle ou des problèmes subsistent-ils? Si le serveur SQL est préférable, quelqu'un peut-il préciser exactement pourquoi SQL Server est préférable? même fournisseur Microsoft? – user3508811

+0

Je ne sais pas comment c'est en ce moment, mais nous avons eu une assez mauvaise expérience en raison du manque de fonctionnalités et d'une incohérence générale. MS MSQL est définitivement préférable, car Microsoft met sa propre pile en premier. –