Gespeicherte Prozeduren und Aktualisieren von EDMX

74

Ich hatte endlose Probleme mit gespeicherten Prozeduren und EDMX. Ich habe eine Prozedur erstellt, das Modell aus der Datenbank aktualisiert und alles hat funktioniert. Ich habe dann eine Spalte entfernt und eine neue in die gespeicherte Prozedur eingefügt. Ich habe das Modell aktualisiert, aber der EDMX schien die Proc-Definition nicht zu aktualisieren.

Ich habe den Prozess gelöscht und ein Update durchgeführt, musste jedoch alle Verweise auf den Prozess manuell löschen. Am Ende habe ich nur den Prozess umbenannt und per Modellupdate aus der Datenbank importiert.

Ich hatte gerade das gleiche Problem. Neue Spalte hinzugefügt und vorhandene Spalte umbenannt. Ich habe das EDMX über das Aktualisierungsmodell aus der Datenbank aktualisiert, aber es gab keine Änderungen am EDMX, und offensichtlich schlägt es zur Laufzeit fehl. Wie sollte eine Aktualisierung der gespeicherten Prozedur mit Entity Framework durchgeführt werden?

Geben Sie hier die Bildbeschreibung ein

Ich habe den Prozess entfernt, das Modell neu generiert, die 'cs'-Dateien für den Prozess gelöscht, kompiliert, dann die Prozedur erneut zur Datenbank hinzugefügt, das Modell neu generiert und bin fertig! Es fügt das gleiche Modell dreimal hinzu, wobei nur das letzte richtig ist. Warum bringt es immer wieder die alten Versionen zurück?

Craig
quelle

Antworten:

184

(Diese Lösung ist für EF 6. Ich habe es in anderen EF-Versionen nicht versucht. Es funktioniert gut.)


Gehen Sie zum Modellbrowser. MyStoreProc ist der Name der gespeicherten Prozedur (als Beispiel). MyStoreProc wird an 3 Stellen angezeigt.

  1. 1. Platz - Unter Komplexe Typen-> als MyStoreProc_result
  2. 2. Platz - Unter Funktionsimporte -> als MyStoreProc
  3. 3. Platz - Unter Gespeicherte Prozesse / Funktionen -> als MyStoreProc

Löschen Sie alle drei aus dem Modell. Speichern Sie den edmx (indem Sie in das Fenster klicken und dann Strg + S drücken). Klicken Sie dann mit der rechten Maustaste und klicken Sie auf Modell aus Datenbank aktualisieren. Fügen Sie dann die aktualisierte gespeicherte Prozedur hinzu und speichern Sie sie erneut.

Ohne Probleme gelöst :)

SArifin
quelle
Das war sehr hilfreich, danke! Ich muss zugeben, dass ich etwas ratlos war, weil ich im edmx-Diagramm danach gesucht habe und gespeicherte Prozeduren dort nicht angezeigt werden - nur Tabellen und Ansichten.
Rich Ward
1
Gute und genaue Lösung, dies funktioniert auch in EF 5 gut.
3 Regeln
7
Dies funktioniert sicherlich, aber was ist die Idee dahinter, den edmx nicht wirklich zu aktualisieren, wenn eine Aktualisierung durchgeführt wird? Es macht keinen Sinn.
LarryBud
Ausgezeichnet, hat einen Zauber gewirkt! Ich lösche auch das EDMX von Objekten und erstelle das neu, indem ich alles erneut importiere.
Mike Upjohn
1
Große Hilfe und Zeitersparnis. in EF 6.1.3 arbeiten alle wie scharf. danke
PatsonLeaner
42

So aktualisieren Sie eine vorhandene gespeicherte Prozedur in der edmx-Datei:

  1. Gehen Sie zu "Modellbrowser"> "Funktionsimporte"> suchen Sie die gewünschte gespeicherte Prozedurklasse> klicken Sie mit der rechten Maustaste und klicken Sie auf "Bearbeiten"
  2. Klicken Sie im Formular "Funktionsimport bearbeiten" im Abschnitt "Rückgabe einer Sammlung von" auf die Schaltfläche "Aktualisieren"
  3. Klicken Sie auf "OK", um die Aktualisierung abzuschließen.

Geben Sie hier die Bildbeschreibung ein

Fábio Nascimento
quelle
2
Ja, ich mache es genauso (stimme von mir ab). Wie ich bereits kommentiert habe - Leute von Microsoft sollten die Funktionalität offenlegen, um dies zu tun, indem sie auswählen, welche gespeicherten Prozeduren / Funktionen aktualisiert werden sollen (ähnlich wie beim Hinzufügen / Löschen von DBOS aus der Datenbank. Es gibt die Registerkarte "Aktualisieren", die IMO nicht sehr hilfreich ist)
Miroslav Hristov
8

Die einzige Lösung, die ich finden konnte, war das Schließen des EDMX und das manuelle Bearbeiten des XML, das selbst nach dem Entfernen des gespeicherten Prozesses aus der Datenbank und dem Aktualisieren des Modells aus der Datenbank immer noch den Prozess erwähnte. Das Entfernen der Zeilen aus dem XML hat das Problem behoben.

Craig
quelle
5

Folge diesen Schritten:

Schritt 1: Öffnen Sie Edmx

Geben Sie hier die Bildbeschreibung ein

Schritt 2: Öffnen Sie den Modellbrowser

Geben Sie hier die Bildbeschreibung ein

Schritt 3: Öffnen Sie komplexe Typen und entfernen Sie Ihre procedure_Result

Geben Sie hier die Bildbeschreibung ein

Schritt 4: Öffnen Sie Funktionen Importe und löschen Sie Ihre procedure

Geben Sie hier die Bildbeschreibung ein

Schritt 5 Öffnen Sie StoredProcedur und Funktionen und löschen Sie Ihre procedure

Geben Sie hier die Bildbeschreibung ein

Schritt 6: Speichern Sie Edmx (Ctrl+S), Clean Solution , Update Model From Databaseund wählen Sie proceduredie clean, buildLösung aus, die Sie aktualisieren möchten . Erledigt !

Ishwor Khanal
quelle
0

Aktualisieren Sie zunächst Ihren SP über "Modell aus Datenbank aktualisieren". Wenn dies funktioniert, ist dies in Ordnung, wenn nicht, und lösen Sie dieselbe Ausnahme aus. Führen Sie dann die folgenden Schritte aus. 1.Doppelklicken Sie auf die EDMX-Datei. 2. Löschen Sie im Modellbrowser SP aus komplexen Typen, Funktionsimporten und gespeicherten Prozeduren / Funktionen. 3. Speichern Sie alle. 4. Fügen Sie Ihren SP erneut über "Modell aus Datenbank aktualisieren" hinzu. 5. Alle speichern.

MS Wani
quelle