EF6 codefirst + MySql-Migrationen: type nvarchar (max) wird nicht unterstützt

8

Ich versuche, EF6-Code zuerst + MySql mit Migrationen zu verwenden, aber ich bleibe mit diesem Fehler während add-migration :

%Vor%

Es scheint also, dass EF versucht, SQLServer-Typen für MySql zu verwenden, selbst wenn ich die Standard-Verbindungsfactory in meiner Konfiguration geändert habe.

Ich kann viele Probleme mit der gleichen Fehlermeldung finden, aber keiner von ihnen scheint auf dem neuesten Stand zu sein oder etwas vorzuschlagen, was ich nicht schon versucht habe. Hier sind meine Schritte zum Aktivieren von Migrationen in einer DAL-DLL für MySql, könnte jemand einen Hinweis geben?

(1) Fügen Sie die NuGet Pakete hinzu:

  • MySql.ConnectorNET.Data
  • MySql.ConnectorNET.Entity

(2) Fügen Sie eine Verbindungszeichenfolge für MySql in der App.config -Datei hinzu, etwa:

%Vor%

(3) Stellen Sie außerdem sicher, dass die Konfiguration (in meinem Fall App.config ) von NuGet wie angegeben geändert wurde:

  • Ersetzen Sie die Standard-Verbindungsfactory:

    (defaultconnectionfactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity.EF6" /)

  • füge den MySql-Provider hinzu:

    (Anbieter invariantname="MySql.Data.MySqlClient"             type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version = 6.8.3.0, Kultur = neutral, PublicKeyToken = c5687fc88969c44d" /)

  • Provider zu system.data hinzufügen:

    (System.data)     (dbproviderfactories)         (remove name="MySQL-Datenprovider" invariant="MySql.Data.MySqlClient" /)         (add name="MySQL Datenanbieter"                 invariant="MySql.Data.MySqlClient"                 description=". Net Framework-Datenanbieter für MySQL"                 type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version = 6.8.3.0, Kultur = neutral, PublicKeyToken = c5687fc88969c44d" /)     (/ dbproviderfactories) (/system.data)

(4) Fügen Sie den Code-Konfigurationstyp manuell hinzu (ich möchte meinen Datenkontextcode nicht berühren, da er allgemein gehalten werden muss), wie in Ссылка :

%Vor%

Einige String-Eigenschaften in meinen POCO-Objekten haben keine maximale Länge, da sie nvarchar(max) , d. h. text in MySql sein müssen. Aber ich bekomme den oben genannten Fehler mit diesem Stacktrace:

%Vor%

Irgendein Hinweis?

    
Naftis 30.06.2014, 18:52
quelle

3 Antworten

2

Ich hatte die ganze Nacht mit diesem Fehler zu kämpfen. Die Korrektur war kontraintuitiv, aber so weit, so gut ... Es scheint, dass das Problem mit alten Migrationen zu tun hatte, die mit LocalDB (SQL Server) eingerichtet wurden, aber sogar das Löschen der alten Migrationen hatte keine Auswirkungen. Ich habe auch viel unnötige Zeit damit verbracht, mit meiner Web.config, dem Datenbankkontext usw. zu hantieren ... Ich schlage vor, Folgendes zu versuchen, bevor ich deinen Kopf an die Wand hämmere ...

  1. Löschen Sie den Migrationsordner
  2. Versuchen Sie, Migrationen zu aktivieren und die anfängliche Migration hinzuzufügen (im PM-Typ "enable-migrations" und dann "add-migration init")
  3. Wenn Sie den obigen Fehler in der PM erhalten, löschen Sie den Migrationsordner erneut und öffnen Sie dann MySQL Workbench
  4. Suchen Sie in MySQL Workbench das Schema mit dem Namen, den Sie in Ihrem connectionString angegeben haben (sieht wie database = whateverYouCalledIt aus)
  5. Öffnen Sie in diesem Schema die Tabellen und suchen Sie nach "__migrationshistory"
  6. Klicken Sie mit der rechten Maustaste auf diese Tabelle, klicken Sie auf Zeilen auswählen und löschen Sie alle vorhandenen Migrationseinträge, und wiederholen Sie Schritt 2

Aus irgendeinem Grund hat dies für mich den Ausschlag gegeben, wenn das Löschen von Migrationen im Solution Explorer keine Auswirkungen hatte. Anscheinend hat das den Migrationsverlauf in der Datenbank nicht gelöscht ...

    
Methodician 07.01.2016 01:12
quelle
0

Die folgenden Schritte führten zu derselben Fehlermeldung für mich:

  1. Erstellen Sie ein Projekt mithilfe von Entitätsframework und SQL Server mit einer Migration. Verwenden Sie einige string -Eigenschaften ohne MaxLength in den Modellklassen, die nvarchar(max) zugeordnet sind.
  2. Rekonfigurieren Sie für MySQL wie oben, für eine leere MySQL-Datenbank.
  3. Führen Sie Update-Database .
  4. aus

Verwenden Sie zum Zeitpunkt des Schreibens die neuesten Softwareversionen-Bibliotheken.

Nachdem ich den Fehler erhalten habe, habe ich versucht, [MaxLength(..)] für alle String-Eigenschaften zu setzen. Die Fehlermeldung wird immer angezeigt, auch bei der Wiederherstellung der Migration mit Add-Migration Initial -Force .

In meinem Fall hat sich herausgestellt, dass der Aufruf von Update-Database in meiner MySQL-Datenbank (die die alten Migrationen für SQL Server einschließlich nvarchar(max) ausgeführt hat) zu einigen Auswirkungen auf meine Datenbank geführt hat dh Tabellen werden erstellt, aber nicht alle.

Die Lösung für mich war:

  1. Löschen Sie diese Tabellen, stellen Sie sicher, dass die Datenbank wieder leer war.
  2. Enable-Migrations -Force
  3. Add-Migration Initial -Force
  4. Update-Database

Beachten Sie, dass diese Schritte manuelle Änderungen an Ihren Migrationen und Seed() -Funktionen überschreiben, die Sie möglicherweise selektiv wiederherstellen möchten.

Danach habe ich String-Eigenschaften ohne [MaxLength(..)] getestet. Diese können problemlos mit dem MySQL-Provider verwendet werden, sie werden auf longtext abgebildet.

    
AronVanAmmers 27.02.2015 15:29
quelle
0

Ich hatte das gleiche Problem und fand die Ursache für bestehende Migrationen, die so aussahen: AddColumn("dbo.RoundJumperMap", "VideoUrl", c => c.String());

Sobald ich all diese gefunden habe und eine maximale Länge hinzugefügt habe, lief alles super. AddColumn("dbo.RoundJumperMap", "VideoUrl", c => c.String(maxLength: 1000));

Ich musste keine meiner bestehenden Migrationen oder ähnliches löschen.

    
jhilden 09.11.2016 22:12
quelle