2012-03-30 7 views
4

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.

enter image description here

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!

enter image description here

+0

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. –

+0

@vucetica siehe aktualisierte Antwort – ken2k

Antwort

3

Lassen Sie mich zuerst sagen, dies ist nicht eine direkte Antwort; aber kann Sie zur Lösung führen. Öffnen Sie zunächst die edmx-Datei mit dem XML-Editor (rechte Maustaste edmx-Datei und wählen Sie Öffnen mit). In der edmx-Datei gibt es einige Abschnitte, die sich auf das Objekt-DB-Mapping beziehen, und drei davon sind wichtig. Es gibt ConceptualModels, StorageModels und Mapping-Knoten. In dem Speicherknoten prüfen, ob Namen der Tabellen sind ok:

<EntitySet Name="MasterSet" EntityType="Model1.Store.MasterSet" store:Type="Tables" Schema="dbo" /> 

Falls die Tabellennamen nicht richtig sind, so dass sie einfach und aktualisieren in dem Zuordnungs Abschnitt wird die zugehörigen Daten ändern.

+0

Ich fand das Problem dank Ihrer Antwort. Ich überprüfte die SSDL, alles war in Ordnung mit den Tabellennamen ... aber das Schema war "dbo" anstelle meines tatsächlichen Schemanamens ... Siehe aktualisierte Frage für vollständige Wie-zu-Reparatur-Details. 50 Kudos für dich, danke! (EDIT: Ich kann dir diese 50 Punkte jetzt nicht geben, ich muss 20 Stunden warten;)) – ken2k

+0

froh, dir zu helfen, tatsächlich hast du das Problem gelöst, ich habe geholfen. – daryal

+1

Das war sehr hilfreich, danke! Ich habe edmxfiles seit Wochen v. Chr. Von Hand editiert. –

Verwandte Themen