Ich versuche, MySQL (5.5.22, Connector 6.5.4) mit Entity Framework 4 zu verwenden.Wie aktualisiert man ein Entity Framework Modell von einer MySQL Datenbank?
Ich verwende Model First Ansatz. Es ist mir gelungen, ein SQL-Skript aus meinem Modell zu erstellen.
Jetzt möchte ich meine Datenbank ändern und dann mein Modell aus der geänderten Datenbank aktualisieren (zum Beispiel ich eine neue Spalte zu einer Tabelle hinzufügen, und ich erwarte eine neue Eigenschaft der entsprechenden Entität hinzugefügt werden) . Dieser Ansatz funktioniert problemlos mit SQL Server 2008 R2.
Mit MySQL, kann ich nicht es funktioniert: Der Update-Assistent zeigt immer meine aktuellen Tabellen (die Einheiten bereits abgebildet werden) als neue Tabellen und versucht, neue Einheiten zum Modell hinzuzufügen statt Aktualisieren der aktuellen Entitäten.
Vielleicht gibt es etwas im Zusammenhang mit dem old #48875 bug (CREATE INDEX modifies the table name case
): MySQL Kräfte meine Tabellennamen Klein zu sein, aber diese Tabellen sind in der MSL als Kamel Fall abgebildet ...
Ist es tatsächlich möglich, um MySQL und Entity Framework ohne all diese Probleme zusammenarbeiten zu lassen?
EDIT
Wenn es helfen kann, wenn Tabellen manuell umbenennen Kamel Fall verwenden
rename table mytable to mytable_bis
rename table mytable_bis to MyTable
es besser funktioniert nicht.
EDIT 2
Wenn Sie akzeptieren neue Objekte aus diesen Tabellen zu erstellen, was sind die Unterschiede Sie feststellen können? Ich würde aufpassen, wenn Ihre generierten Tabellen zum Beispiel Primärschlüssel haben.
Wenn die Annahme neuer Einheiten im Update-Assistenten aus den vorhandenen Tabellen hinzufügen, erstellt es Unternehmen, die genau wie meine bestehenden Einheiten mit 1
am Ende des Namens aufgerufen werden.
Zum Beispiel habe ich derzeit eine einfache Entität namens Zone
mit einer Tabelle namens Zones
zugeordnet. Nach der Aktualisierung von der Datenbank erstellt es eine neue Entität mit dem Namen Zone1
, die der Tabelle zugeordnet ist. Die Zuordnung zwischen Zone
und Zones
ist unterbrochen, und zwischen Zone1
und Zones
wird eine neue Zuordnung erstellt.
Zone
und Zone1
Entitäten sind identisch (exakt gleichen Eigenschaften, die gleiche Primärschlüssel ... etc.).
Ich habe dann versucht, meine früheren Einheiten alle und alle meine XXXX1
Entitäten XXXX
umbenannt zu entfernen (zum Beispiel löschte ich die Zone
Einheit und dann Zone1
-Zone
umbenannt).
Dann habe ich versucht, ein zweites Mal von der Datenbank zu aktualisieren: der Update-Assistent hat wie erwartet funktioniert (keine neuen Entitäten zu erstellen, nur Entitäten zu aktualisieren).
Dann habe ich versucht, das SQL-Skript aus dem Modell neu zu generieren .... es hat funktioniert ... aber dann habe ich versucht, erneut aus der Datenbank zu aktualisieren und das Problem kam zurück ... der Update-Assistent versucht noch um neue Entitäten hinzuzufügen.
EDIT 3
schließlich das Problem behoben (dank Daryal)! Das Problem war mein Datenbank Schemaname wurde nicht in den Modelleigenschaften angegeben ... Bei der Verwendung von SQL Server ist es dbo
99% der Zeit, aber es ist nicht der Fall mit MySQL standardmäßig.
Beim Aktualisieren des Modells aus der Datenbank wurde die SSDL entsprechend dem tatsächlichen Schemanamen der Datenbank aktualisiert.
Aber nachdem die Datenbank erneut aus dem Modell generiert wurde, wurde der falsche Name des Datenbankschemas anstelle des guten verwendet. Deshalb ist es beim erneuten Update aus der DB fehlgeschlagen.
D'oh!
Wenn Sie akzeptieren, neue Entitäten aus diesen Tabellen zu erstellen, welche Unterschiede können Sie feststellen? Ich würde aufpassen, wenn Ihre generierten Tabellen zum Beispiel Primärschlüssel haben. –
@vucetica siehe aktualisierte Antwort – ken2k