Frage

Ich habe VS SP1 installiert und mit Entity Framework herumgespielt.

Ich habe ein Schema aus einer vorhandenen Datenbank erstellt und einige grundlegende Vorgänge ausprobiert.

Das meiste hat gut geklappt, bis auf die Aktualisierung des Datenbankschemas.

Ich habe die Datenbank in allen grundlegenden Punkten geändert:

  • eine neue Tabelle hinzugefügt
  • eine Tabelle gelöscht
  • Eine neue Spalte zu einer vorhandenen Tabelle hinzugefügt
  • eine Spalte aus einer vorhandenen Tabelle gelöscht
  • hat den Typ einer vorhandenen Spalte geändert

Die ersten drei liefen gut, aber die Typänderung und die Spaltenlöschung folgten nicht den Datenbankänderungen.

Gibt es eine Möglichkeit, die Arbeit des Designers zu übernehmen?Oder wird es derzeit nicht unterstützt?Ich habe noch kein entsprechendes Material gefunden, bin aber immer noch auf der Suche.

War es hilfreich?

Lösung

Ich würde vermuten, dass dies möglicherweise nicht geschieht, weil sie den Build für vorhandenen Code zerstören würden, aber das ist nur eine Vermutung meinerseits.

Hier ist meine Logik:

Erstens soll es sich bei EF um eine mehr als 1:1-Tabellenzuordnung handeln. Daher ist es durchaus möglich, dass das Löschen einer Spalte aus Tabelle A nicht bedeutet, dass es für diese Entität keine Eigenschaftsbeschreibung geben sollte.Sie könnten diese Eigenschaft einfach einer anderen Tabelle zuordnen.

Zweitens könnte das Ändern eines Typs dazu führen, dass Builds beschädigt werden.Das ist dort der einzige Grund.

Andere Tipps

Ich habe festgestellt, dass es im Allgemeinen immer noch einige Fehler bei der Funktionalität „Modell aus Datenbank aktualisieren“ gibt.

Schlüssel sind für mich der Killer – ich habe noch keine Änderungen an einer Fremdschlüsselbeziehung vorgenommen oder einen Primärschlüssel zu einer Tabelle hinzugefügt und dafür gesorgt, dass der Updater ordnungsgemäß funktioniert (insofern er einen Kompilierungsfehler beim Generierten ausgibt). Code) - aber um das Problem zu lösen, ist es einfach, das Modell zu löschen und erneut zu importieren (dauert nur eine Minute) - das ist natürlich nicht ideal, aber ich hatte noch nie einen Fehler bei einem „frischen“ Import.

Aus den Demos des Designers, die ich gesehen habe, geht hervor, dass es sich nicht um ein einwandfreies Werkzeug handelt.Da es sich um ein Produkt der Version 1.0 handelt, weist es mit Sicherheit einige Probleme auf.Der Änderungstyp ist anscheinend einer davon.Durch die Beobachtung des Designers und der Codegenerierung ging ich davon aus, dass entweder zur Kompilierungszeit (unwahrscheinlich) oder zur Laufzeit (wenn das Modell tatsächlich ausgeführt wird) ein Fehler auftreten würde.

Sie müssen die Spalte selbst aus dem Designer oder der XML-Datei löschen.

Wie bereits erwähnt, können Sie die Spalte einfach aus dem Designer löschen.Was das Ändern des Datentyps der Spalte betrifft:Aktualisieren Sie einfach das Modell aus der Datenbank, gehen Sie dann zu den Tabellenzuordnungen und wählen Sie die Spalte aus, die Sie in der Datenbank geändert haben.Die Werte auf der rechten Seite stellen Ihr Modell dar. Seltsamerweise wird dies nicht automatisch aktualisiert. Wählen Sie einfach die Spalte rechts aus, gehen Sie zu den Eigenschaften und ändern Sie dort den Datentyp.Es sollte ein Dropdown-Menü werden.

Prost.

Ruddy

Ich habe eine ähnliche Anwendung wie von Ihnen angefordert erstellt.Aber meine Lösung war zu schwer.Ich werde versuchen, es zu erzählen;

  1. Sie müssen Ihre eigenen Datenbankverwaltungsklassen erstellen und diese Objekte sind für die Erstellung und Aktualisierung des Datenbankschemas verantwortlich (das habe ich manuell erstellt).

  2. Ich habe einen guten Artikel und Quellcode gesehen Blog des ADO.NET-Teams Dann können Sie EDMTools auch von diesem Blog herunterladen, es ist Open Source.Und Sie können daraus auch Modellgenerierungs- und Aktualisierungsroutinen in Ihr Projekt implementieren.

  3. Wenn sich schließlich Ihr Schema geändert hat, sollten Sie Ihr Modell neu erstellen und binden und Ihre Datenassembly zur Laufzeit neu erstellen.Aber Sie müssen den wichtigsten Gedanken wissen: Sie sollten Ihre Datenmodellbaugruppe lose gekoppelt an Ihr Projekt binden (sehen Sie sich das an). Post)

    Andernfalls sollten Sie auf die Veröffentlichung von EF 4.0 (jetzt CTP 1) warten. Sie haben angekündigt, dass sie DatabaseScript-Funktionen zum Erstellen, Löschen und Aktualisieren bereitstellen werden.

Gutes Schloss

Ich mache das (und ich mache alle Dinge, die Sie erwähnen, plus das Umbenennen von Spalten), indem ich Änderungen an der Datenbank vornehme und den EF-Code mit EF Code First neu generiere.

Ich manipuliere die EF Code First-Klassen weder zum Guten noch zum Schlechten (einschließlich unsinnig benannter Spalten für Beziehungen), um den Prozess zu vereinfachen.

Kein Designer oder ORM-Schemagenerator kann Änderungen an Ihrer Produktionsdatenbank vornehmen, wenn diese eingeschränkte Daten enthält.Aus diesem Grund sollten Sie immer zunächst prüfen, ob Ihre Änderungen an der Datenbank machbar sind, sie in einer Entwicklungsdatenbank ausprobieren und dann Ihren Code anpassen, um die Änderungen widerzuspiegeln.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top