Erstellen einer Datenzugriffsebene für eine interne Unternehmens-MVC-Anwendung mit Entity Framework und dem Repository-Muster. In einigen Fällen muss ich beispielsweise 100.000 Zeilen in einer Tabelle mit 100 Millionen Zeilen in einer SQL Server 2008 R2-Datenbank aktualisieren.Kann Entity Framework eine UPDATE ... WHERE-Anweisung in SQL generieren?
Ich verwende EF6, das auf eine bestehende Datenbank abzielt, die wir refaktorisieren. Ich bin neu in Entity Framework, habe aber viel Erfahrung mit SQL Server.
Egal wie ich meine Update-Anweisung zu strukturieren scheint, wenn ich einen Profiler ausführe, sehe ich 60k individuelle Updates nach ID. Dies kann bis zu 5 Minuten dauern. Ich habe jedoch eine "Chargennummer" angegeben, die für eine Reihe dieser Datensätze indiziert ist. Gibt es einen Weg zu UPDATE
diese Datensätze mit einer einzigen WHERE-Klausel aus EF generiert? Meine Lösung war, einfach eine einfache SP zu schreiben, die ich dann EF-Aufruf habe.
EntityFramework führt keine Stapeloperationen durch. Jede Operation ist eine Operation in der Datenbank pro Datensatz (wie Sie festgestellt haben) Sie können entweder Ihre eigene SQL-Anweisung über EntityFramework schreiben und ausführen oder eine gespeicherte Prozedur aufrufen und die entsprechenden Parameter über EntityFramework übergeben. – Tommy
Nach meiner Erfahrung würde ich mit einem SP für solche "große" Operationen gehen. –
Die aktuellen EF v6-Versionen unterstützen keine Batch-Vorgänge - aber das EF-Team arbeitet hart an EF v7 und * unterstützt schließlich Batch-Operationen. Vorerst müssen Sie entweder auf Ihre eigenen Lösungen zurückgreifen oder sich Lösungen von Drittanbietern wie [EntityFramework.Extended] (https://github.com/loresoft/EntityFramework.Extended) ansehen. –