Übergeben Sie den Tabellenwerttyp über Entity Framework an die gespeicherte SQL Server-Prozedur

8

Ich habe einen benutzerdefinierten Tabellentyp in SQL Server erstellt:

%Vor%

Und ich verwende eine gespeicherte Prozedur, um Datensätze in die Datenbank einzufügen:

%Vor%

Und ich möchte EF verwenden, um diese gespeicherte Prozedur auszuführen, aber hier ist das Problem: Wie kann ich eine benutzerdefinierte Tabelle an die gespeicherte Prozedur übergeben?

Ich habe versucht, die gespeicherte Prozedur dem Modell hinzuzufügen, aber ich kann die gewünschte gespeicherte Prozedur im aktualisierten Kontext nicht finden.

Was ich versuche zu tun ist eine Masseneinfügung in eine Tabelle auszuführen, hier ist die Methode, die ich momentan verwende:

%Vor%

Momentan verwende ich eine foreach -Schleife, um die Liste durchzulaufen, um ein Element in die DB einzufügen, aber wenn die Liste viele Elemente enthält, dann wird es ein Leistungsproblem geben, also denke ich daran, eine zu übergeben Listen Sie die gespeicherte Prozedur auf und führen Sie die Einfügung aus.

Wie kann ich dieses Problem lösen? Oder gibt es bessere Möglichkeiten, dies zu tun?

    
User2012384 18.11.2015, 06:04
quelle

2 Antworten

6

Nehmen wir an, Sie möchten eine Tabelle mit einer einzelnen GUID-Spalte senden.

Zunächst müssen wir eine Struktur erstellen, die verwendet SqlMetaData , die das Schema der Tabelle (Spalten) darstellt.

%Vor%

Als Nächstes erstellen Sie eine Liste von Datensätzen, die mit dem Schema übereinstimmen, indem Sie SqlDataRecord .

%Vor%

Erstellen Sie dann den SqlParameter :

%Vor%

Rufen Sie dann einfach die gespeicherte Prozedur auf, indem Sie die Database.SqlQuery .

%Vor%

Erstellen Sie in SQL Server Ihren benutzerdefinierten Tabellentyp (ich suffiziere sie mit TTV, tabellentypischem Wert):

%Vor%

Geben Sie dann den Typ als Parameter an (vergessen Sie nicht, dass Tabellentypwerte nur gelesen werden müssen!):

%Vor%     
Erik Philips 18.11.2015, 06:37
quelle
3

Ich schlage vor, dass Sie keine Stored Procedure verwenden, um Massendaten einzufügen, sondern verlassen Sie sich einfach auf den Entity Framework-Einfügemechanismus.

%Vor%

Das Entity-Framework führt diese Einfügung intelligent in einer einzelnen Transaktion und (normalerweise) in einer einzigen Abfrageausführung aus, was fast der Ausführung der gespeicherten Prozedur entspricht. Dies ist besser, anstatt sich auf die gespeicherte Prozedur zu verlassen, nur um eine Menge Daten einzufügen.

    
Gilang 18.11.2015 06:10
quelle