Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Empfehlen Sie die Verwendung von temporären Tabellen oder Tabellenvariablen in Entity Framework 4. Aktualisieren Sie das Performance Entity Framework

Für Datenmengen wie 300.000 Zeilen würde ich EF vergessen. Ich würde dies tun, indem ich eine Tabelle wie diese habe:

BatchId  RowId

Dabei ist RowId der PK der Zeile, die wir aktualisieren möchten, und BatchId bezieht sich nur auf diesen "Lauf" von 300.000 Zeilen (um mehrere auf einmal zuzulassen usw.).

Ich würde eine neue BatchId generieren (dies könnte etwas Einzigartiges sein - Guid springt mir in den Sinn) und SqlBulkCopy verwenden, um die Datensätze in diese Tabelle einzufügen, dh

100034   17
100034   22
...
100034   134556

Ich würde dann einen einfachen Sproc verwenden, um die Verknüpfung und Aktualisierung durchzuführen (und den Stapel aus der Tabelle zu löschen).

SqlBulkCopy ist der schnellste Weg, diese Datenmenge auf den Server zu bringen; Sie werden nicht in Hin- und Rückfahrten ertrinken. EF ist objektorientiert:nett für viele Szenarien - aber nicht dieses.