Ich versuche, EF6-Code zuerst + MySql mit Migrationen zu verwenden, aber ich bleibe mit diesem Fehler während add-migration
:
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:
(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:
Irgendein Hinweis?
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 ...
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 ...
Die folgenden Schritte führten zu derselben Fehlermeldung für mich:
string
-Eigenschaften ohne MaxLength
in den Modellklassen, die nvarchar(max)
zugeordnet sind. Update-Database
. 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:
Enable-Migrations -Force
Add-Migration Initial -Force
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.
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.
Tags und Links entity-framework code-first-migrations mysql