7
votes

MySQL 5.5 + Connecteur .NET + Framework d'entité + Migrations = FormatException

J'ai essayé de trouver une solution pour mon problème mais mes efforts jusqu'à présent étaient en vain. : - (

J'ai créé un projet Web à l'aide de Visual Studio 2010, .NET Framework 4, C #, Entity Framework 5.0, MySQL 5.5 et son connecteur .NET correspondant (version 6.5.4). J'utilise la première approche du code Pour les entités et la cartographie O / R. P>

Le problème que je suis confronté est que je ne suis pas incapable d'exécuter ce qui semblait être une migration simple. Voici mes classes d'entité: P> xxx pré>

le code généré par add-migration acesso code> (uniquement up () code> méthode): p> xxx Pré>

Tout d'abord, je devais modifier les propriétés nommées Versao (version) de p> xxx pré>

à p> xxx pré> p > Parce qu'une erreur s'est produite avant le changement (quelque chose sur le type Rowversion n'a pas été qualifié avec un espace de noms ou un alias). Après ce changement, j'ai pu générer la migration mais la commande update-base de données code> a échoué avec le Après erreur indiquée dans la console: p>

System.FormatException: Cadeia de entrada não estava em um formato incorreto.
    em System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)


1 commentaires

Quelle est la trace de la pile? Je me demande si cela n'est pas ceci: entityframework.codeplex.com/workitem/461


6 Réponses :


3
votes

Vous devez également essayer connecteur .NET 6.6 car il s'agit du premier support réclamant pour EF 4.3 (la première version avec migrations). Si cela ne vous aide pas, essayez DotConnect pour MySQL (au moins d'essai) pour trouver si Le problème est dans le connecteur .NET ou dans EF. Le connecteur ODBC ne fonctionnera pas avec EF.


1 commentaires

Merci! Presque là-bas ... Malheureusement, le connecteur .NET 6.6 dépend de l'entitéFramework.dll version = 4.3.1.0 Mais la version d'entité Framework 5.0 DLL est 4.4.0.0. System.reflection.TargeTInvocationException se produit lorsque j'essaie d'exécuter les migrations à l'aide du nouveau connecteur: System.io.FileloadException: Não FOI Possível Carregar Arquivo ou Assembly 'EntityFramework, version = 4.3.1.0, Culture = neutre, PublickeyToken = B77A5C561934E089' OU uma de suas dépendênais. Un Manifeste de Finição Do Assemblage localizado Não corresponde à Referência Do Assembly. (Exceção de HRESULT: 0x80131040)



2
votes

Je ne pense pas que la migration de code est prise en charge par .NET Connector 6.6. Je l'ai déjà essayé, l'erreur que vous obtiendrez, lorsque vous exécutez «la base de données de mise à jour». Aucun migrationQlenerator trouvé pour le fournisseur 'mysql.data.mysqlclient'. Utilisez la méthode SetsQLenerator dans la classe de configuration des migrations cible pour enregistrer des générateurs SQL supplémentaires. DotConnect for MySQL pourrait fonctionner car ils disent qu'ils ont ajouté le support de migration


1 commentaires

Un mysqlmigrationqlgenerator existe dans le paquet mysql.data.entity. Vous devez l'enregistrer manuellement à l'aide de SETMIGRAGATIONSQLGenerator (). Vous devez également compiler le connecteur .NET 6.6 contre .NET Framework 4.5 ou vous ferez l'expérience de ce que Matheus.emm a fait ci-dessus



0
votes

La chose avec l'utilisation d'EF CTP5 (A.k.a version 4.4.0) est que la méthode CreateOn a été obsolète (qui permettait de créer la table associée dans la base de données) et du connecteur / NET 6.6 tente de migrer cette table provoquant une exception.


0 commentaires

22
votes

J'ai a créé une fourchette du connecteur de données MySQL V.6.6.4 qui prend en charge la dernière version de l'entité Framework (V.5).

Pour l'utiliser, vous pouvez simplement Téléchargez les fichiers binaires , qui sont des assemblages de remplacement pour mysql.data et mysql.data.entity . Assurez-vous également que votre projet dépend de l'EF5 plutôt que de 4,3.

après votre Activer-migration La première fois, modifiez votre constructeur de la classe Inclure la ligne: xxx

à ce stade, vous devez être capable d'exécuter add-migration et update-base de données Sans problèmes.

Les changements de clé de ma fourche sont les suivants:

  • Les fichiers binaires dépendent de l'EF5 plutôt que de l'EF4.3.

  • EF5 PreXend DBO. à tous vos noms de table, que MySQL ne peut pas gérer. Ainsi, ma version packs le générateur de migration SQL pour supprimer le DBO. préfixe des noms de table. Tout cela suppose que vous ne remplacez pas le schéma via le TableauTribute sur les classes d'entité.

  • Il supprime l'utilisation de créatedon comme jimi mentionné dans sa réponse.


8 commentaires

Merci pour votre fourchette. Cela m'a bougé. Où avez-vous obtenu le code source/connector à la fourchette? J'ai essayé de le trouver pour résoudre un autre problème (support Unicode) en vain.


@Sergiopereira, il est livré avec le Archive zip .


Kirk, mais d'où l'avez-vous obtenu? Pour l'instant, je viens de vous faire renverser sur Bitbucket, mais il serait agréable de savoir où se trouve la source d'origine si j'ai besoin de faire une fourchette à nouveau sur une nouvelle version.


@Sergiopereira, je pensais avoir répondu à votre question? Le code source est contenu dans le fichier zip que j'ai lié à mon commentaire précédent. (Il est livré avec le connecteur) C'est là que j'ai reçu le code source. (Je ne pense pas qu'il soit disponible sur GitHub / Bitbucket / etc., Bien que je puisse me tromper)


D'oh. Je pensais que votre lien indique le même zip de votre fourchette. Merci. Je crois que la source utilisée pour vivre sur Launchpad mais je ne pouvais plus le trouver là-bas.


Merci krik !! Appréciez ça !!


Bonjour @kirkwoll je suis tombé sur votre réponse et il a clarifié quelques choses. Une chose que je me demandais est de savoir où le code considère-t-il ceci: "Tout cela suppose que vous ne remplacez pas le schéma via la TableAteTribute sur les classes d'entités" puisque j'utilise ce problème d'obtention de problèmes et que la méthode intérieure Trimschemaprefix est ignorée. génération de code. Des idées?


@Kirkwoll, je souhaite la bienvenue à une réponse si vous en avez un, entre-temps, pour tromper le système, je viens d'utiliser cette convention pour mon entité dto. [Table ("dbo.user")] pour UserDto et son fonctionnement ;-)



2
votes

Il y a une certaine utile comment guide sur l'utilisation de Connector EF + + Efmigrations .. Je pense que cela aiderait si vous les vérifiez. La dernière version du connecteur / net (6.6.4) dépend de l'EF 4.3.1 La version du connecteur / net prenant en charge EF 5 est toujours en phase de code.

HOWTO à l'aide de migrations EF et de connecteur / net

Mise à niveau vers Migrations basées sur le code EF 4.3.1 avec connecteur / Net 6.6

J'espère que cela vous aide!


0 commentaires

2
votes

Je commençais à mentionner l'erreur mentionnée

aucun migrationqlgenerator trouvée pour le fournisseur 'mysql.data.mysqlclient'. Utilisez la méthode SETSQLGenerator dans la classe de configuration des migrations cible pour enregistrer des générateurs SQL supplémentaires. P>

et a été corrigé avec cette instruction P>

SetSqlGenerator("MySql.Data.MySqlClient", new ySql.Data.Entity.MySqlMigrationSqlGenerator());


0 commentaires