Ich habe versucht, eine Lösung für mein Problem zu finden, aber meine bisherigen Bemühungen waren umsonst. : - (
Ich habe ein Webprojekt mit Visual Studio 2010, .NET Framework 4, C #, Entity Framework 5.0, MySQL 5.5 und dem entsprechenden .NET Connector (Version 6.5.4) erstellt. Ich verwende den ersten Code-Ansatz für die Entitäten und das O / R-Mapping.
Das Problem, mit dem ich konfrontiert bin, ist, dass ich scheinbar eine einfache Migration nicht ausführen kann. Hier sind meine Entity-Klassen:
%Vor% Der von Add-Migration Acesso
generierte Code (nur Up()
Methode):
Zuerst musste ich die Eigenschaften namens Versao (Version) von
ändern %Vor%bis
%Vor%, weil vor der Änderung ein Fehler aufgetreten ist (etwas über die Typzeilenversion wurde nicht mit einem Namespace oder Alias qualifiziert). Nach dieser Änderung konnte ich die Migration generieren, aber der Befehl Update-Database
ist mit dem folgenden Fehler in der Konsole fehlgeschlagen:
(Die Eingabezeichenfolge war nicht in einem korrekten Format.)
Ich habe versucht, die MySQL-Versionen 5.5 und 5.1 zu verwenden; die Versionen 6.5.4, 6.4.5 und 6.3.9 des Connectors konnten das Problem nicht lösen.
Ist es möglich, MySQL, Entity Framework und Code First Approach zu verwenden? Wenn nicht, was sind die Konsequenzen der Umstellung auf ODBC-Connector anstelle von .NET?
Vielen Dank im Voraus und Entschuldigung für die große Frage.
Sie sollten auch .NET Connector 6.6 ausprobieren, da dies die erste Version ist, die Support für EF 4.3 (die erste Version mit Migrationen). Wenn es nicht hilft, sollten Sie dotConnect for MySql (mindestens eine Testversion) ausprobieren, um festzustellen, ob das Problem vorliegt. NET Connector oder in EF. ODBC-Connector funktioniert nicht mit EF.
Ich habe erstellt a fork von MySQL Data Connector v.6.6.4, das die neueste Version von Entity Framework (v.5) unterstützt.
Um es zu verwenden, können Sie einfach Laden Sie die Binärdateien herunter , die Ersatz-Baugruppen für MySql.Data
und MySql.Data.Entity
sind. Stellen Sie außerdem sicher, dass Ihr Projekt von EF5 und nicht von 4.3 abhängig ist.
Nachdem Sie Enable-Migrations
das erste Mal geändert haben, ändern Sie den Konstruktor Configuration
class so, dass er folgende Zeile enthält:
An diesem Punkt sollten Sie Add-Migration
und Update-Database
ohne Probleme ausführen können.
Die Schlüsseländerungen meiner Gabel sind wie folgt:
Die Binärdateien hängen von EF5 und nicht von EF4.3 ab.
EF5 fügt dbo.
allen Ihren Tabellennamen voran, die MySQL nicht verarbeiten kann. Daher hackt meine Version den SQL-Migrationsgenerator, um das dbo.
-Präfix von den Tabellennamen zu entfernen. Dies setzt voraus, dass Sie das Schema nicht über das TableAttribute
für die Entitätsklassen außer Kraft setzen.
Es entfernt die Verwendung von CreatedOn
, wie Jimi in seiner Antwort erwähnt hat.
Es gibt einige nützliche Anleitungen zur Verwendung von EF + Connector / Net + EFMigrations. Ich denke, es würde helfen, wenn Sie sie überprüfen. Die neueste Version von Connector / Net (6.6.4) hängt von EF 4.3.1 ab. Die Connector / Net-Version, die EF 5 unterstützt, befindet sich noch in der Codestufe.
HowTo mit EF Migrations und Connector / Net
Upgrade auf Code-basierte Migrationen EF 4.3 .1 mit Connector / Net 6.6
Hoffe, das hilft!
Ich glaube nicht, dass Code Migration von .Net Connector 6.6 unterstützt wird. Ich habe es bereits versucht, den Fehler, den Sie bekommen, wenn Sie 'Update-Datenbank' ausführen Kein MigrationSqlGenerator für Provider 'MySql.Data.MySqlClient' gefunden. Verwenden Sie die SetSqlGenerator-Methode in der Zielmigrationskonfigurationsklasse, um weitere SQL-Generatoren zu registrieren. dotConnect für MySql funktioniert möglicherweise, da sie sagen, dass sie die Migrationsunterstützung hinzugefügt haben
Ich habe unten erwähnten Fehler erhalten
Kein MigrationSqlGenerator für Provider 'MySql.Data.MySqlClient' gefunden. Verwenden Sie die SetSqlGenerator-Methode in der Zielmigrationskonfigurationsklasse, um weitere SQL-Generatoren zu registrieren.
und wurde mit dieser Anweisung behoben
%Vor%Tags und Links entity-framework-5 mysql ef-code-first