Ich habe mehrere Präsentationen von EF Code First gesehen und nicht gesehen, wie EFCF mit gespeicherten Prozeduren funktioniert.
Wie kann ich eine Methode deklarieren, die sp verwendet? Kann ich eine Entität an eine Methode übergeben, die sp aufruft, ohne Entitätseigenschaften manuell sp-Parametern zuzuordnen?
Was passiert auch, wenn ich mein Modell ändere? Würde es meine SP fallen lassen, während die Tabelle aus dem Modell neu erstellt wird? Und was ist mit Auslösern?
Wenn diese Dinge nicht unterstützt werden, gibt es Pläne, sie in Zukunft zu unterstützen?
Antworten:
BEARBEITEN: Meine ursprüngliche Antwort für EF4.1 (unten) ist jetzt veraltet. Bitte lesen Sie die Antwort unten von Diego Vega (der im EF-Team von Microsoft arbeitet)!
@gsharp und Shawn Mclean: Woher bekommen Sie diese Informationen? Haben Sie noch keinen Zugriff auf den zugrunde liegenden ObjectContext?
Ersetzen Sie die "select" -Anweisung durch einen gespeicherten Prozess, und los geht's.
Was Ihre andere Frage betrifft: Ja, leider werden Ihre SPs überlastet. Möglicherweise müssen Sie die Anweisungen "CREATE PROCEDURE" in Ihren Code einfügen.
Für EF 4.2:
quelle
Update: Ab EF6 unterstützt EF Code First die Zuordnung gespeicherter Prozeduren für Einfügungen, Aktualisierungen und Löschungen. Sie können die Zuordnung gespeicherter Prozeduren während der Modellerstellung mithilfe der MapToStoredProcedures-Methode angeben. Wir unterstützen auch das automatische Gerüst für grundlegende gespeicherte Prozeduren für diese Vorgänge. Siehe die Funktionsspezifikation hier .
Ursprüngliche Antwort: In der ersten Version wird weder die Zuordnung gespeicherter Prozeduren im Modell in Code-First unterstützt, noch können wir automatisch gespeicherte Prozeduren für CRUD-Operationen aus Ihren Typen generieren. Dies sind Funktionen, die wir in Zukunft hinzufügen möchten.
Wie in diesem Thread erwähnt, ist es möglich, auf ObjectContext zurückzugreifen, aber DbContext bietet auch nette APIs zum Ausführen nativer SQL-Abfragen und -Befehle (z. B. DbSet.SqlQuery, DbContext.Database.SqlQuery und DbContext.Database.ExecuteSqlCommand). Die verschiedenen SqlQuery-Versionen verfügen über dieselbe grundlegende Materialisierungsfunktionalität wie EF4 (wie ExecuteStoreQuery: http://msdn.microsoft.com/en-us/library/dd487208.aspx ).
Hoffe das hilft.
quelle
quelle
Eine typsicherere Lösung wäre:
http://strugglesofacoder.blogspot.be/2012/03/calling-stored-procedure-with-entity.html
Die Verwendung dieser Klasse ist:
quelle
Für .NET Core (EntityFrameworkCore) konnte ich sie zum Laufen bringen.
Könnte nicht das ordentlichste sein, aber das funktioniert definitiv.
Die Migration zum Addieren der gespeicherten Prozedur sieht aus wie diese :
Ich könnte es dann mit folgendem Code aufrufen :
Später wurde versucht, einige der zugehörigen Daten abzurufen (eine bis viele Beziehungsdaten, z. B. Post-Inhalt), und der Blog kam mit dem gefüllten Post-Inhalt wie erwartet zurück.
quelle