Mein aktuelles Projekt erfordert eine tägliche Synchronisation mit einem externen System. Die Synchronisation basiert auf einer komplexen Importdateistruktur, die mit umfangreicher Geschäftslogik analysiert und verarbeitet wird. Aufgrund der Geschäftslogik haben wir uns dazu entschieden, dies in .NET-Code zu machen und vorhandene BL-Komponenten wiederzuverwenden, anstatt dieselbe Logik in gespeicherten Prozeduren oder Integrationsdiensten zu schreiben.Batch-DB-Befehle in Entity Framework 4.0
Die BL-Schicht befindet sich auf der EF 4.0-Datenzugriffsebene. Die aktuelle Implementierung verarbeitet den Import-Batch, füllt alle Änderungen in ObjectContext und führt SaveChanges in der Transaktion aus. Wenn ich SQL Profiler überprüfe, sehe ich, dass EF jede Änderung der Entität als einzelner SQL-Befehl ausführt (mit eigenem Umlauf in DB). Außerdem sieht es so aus, als würden diese Befehle vollständig sequentiell ausgeführt. So habe ich bis zu 100.000 Roundtrips zur Datenbank für den ersten Import und zwischen 10.000 - 50.000 Roundtrips zur Datenbank für die tägliche Synchronisation.
Ist es möglich, Kommandos irgendwie durch EF selbst oder durch irgendeinen Provider/eine Erweiterung einzufügen/zu aktualisieren/zu löschen?
Also werde ich mit meiner aktuellen Lösung leben, weil das Umschreiben der Lösung keine Option ist. :( –
Yep. EF ist nicht für Batch-Arbeit konzipiert. Und vor allem so etwas wie eine "Import-Batch" - ist eine Datenbank-Problem, nicht ein ORM Anliegen. Ich würde nicht einmal EF dafür verwenden, würde ich eine haben seperater Dienst (zB WCF - gehostet als Windows - Dienst), dessen alleinige Verantwortung es wäre, diese Massendaten zu importieren, wenn eine Synchronisation erforderlich ist .. mein vorheriges Projekt erforderte auch das Synchronisieren von db's mit unserem und externem Windows Dienst (vor dem wcf – RPM1984