2016-05-11 7 views
0

Ich bin gerade dabei, einige Abfragen zu optimieren, und ich möchte eine davon in eine gespeicherte Prozedur verschieben, sagen wir spGetUsers.Wie kann ich Stored Procedures mit EF Code-First verwenden?

Ich verstehe, wie Daten holen von einem gespeicherte Prozedur vorhanden, aber wie gehe ich über die Gewährleistung - Kodex-First mit - update-database meine Procs auch importiert und aktualisiert ihren Inhalt, Griffe Löschen proc, wenn nötig, etc?

+1

Kopieren Sie einfach und vorbei an der Klartextzeichenfolge in die Up-Methode und rufen 'Sql („heres mein proc“)' –

+0

laufen @ Stevenackley - Gibt es einen Weg, dies automatisch zu machen, wenn man eine Liste von Sprocs in einem bestimmten Ordner erstellt, alle vorhandenen Sprocs löscht und die neuen einwirft? – RobVious

+0

Wenn es in der Up-Methode ist, wird es ausgeführt, wenn die Migration ausgeführt wird. Sie können so viele Procs einfügen, wie Sie möchten, schreiben Sie einfach die richtigen alter- oder create-Anweisungen in Ihre SQL-Zeichenfolge. –

Antwort

0

// und aktualisiert ihren Inhalt //

Sie erhalten keine Auto-Magie. Sie übernehmen den Aufwand der Pflege der gespeicherten Prozedur.

Was ist einer der motivierenden Faktoren für die Erstellung von EF und die Verwendung von EF. Sie müssen keine .sql-Dateien verwalten.

Auch mit dem "gets", müssen Sie immer noch beibehalten, wenn Sie nichts umbenennen.

Hinweis: Bei der Erstellung von Entitäten mit der Translate-Methode berücksichtigt EF keine Zuordnung. Es gleicht einfach die Spaltennamen in der Ergebnismenge mit den Eigenschaftsnamen Ihrer Klassen ab.

(von https://msdn.microsoft.com/en-us/data/jj691402.aspx)

0

sollten Sie in der Lage sein, alle gespeicherten Prozedur Updates zu automatisieren aus dem Migrationsskript. Ich würde empfehlen, jede Änderung in einen separaten Sql() Methodenaufruf zu setzen; Falls es einen Syntaxfehler gibt, ist es einfacher zu diagnostizieren.

Wenn die Migration ausgeführt wird, werden Ihre Skripts automatisch ausgeführt und können im Falle eines Downgrades zurückgesetzt werden.

Außerdem, wenn Sie das Skript benötigt auszuführen, könnten Sie Sql("exec dbo.TestProc")

public override void Up() 
    { 

     Sql(alterProc); 
    } 

    public override void Down() 
    { 
     Sql(undoProc); 
    } 

string alterProc = @"ALTER PROCEDURE AS BEGIN dbo.TestProc AS BEGIN SELECT 1 END" 
string undoProc= @"ALTER PROCEDURE AS BEGIN dbo.TestProc AS BEGIN SELECT 2 END" 
Verwandte Themen