Ich würde gerne wissen, ob Sie erweiterte ADO.NET-Bibliotheken für die Arbeit mit Datenbanken empfehlen können.
Ich habe festgestellt, dass LINQ-to-Entities hervorragend dazu geeignet ist, Daten aus Datenbanken zu extrahieren, aber überhaupt nicht zum Einfügen von Daten in Datenbanken. Seine fehlenden Funktionen wie schnelles Bulk-Insert, Culling von Duplikaten und die meisten erweiterten Funktionen, die Sie mit reinem SQL erreichen können.
Also: Können Sie einige ADO.NET-Bibliotheken empfehlen, die die erweiterten Funktionen von LINQ-to-Entities bieten?
Sie können LINQ Entity Data Reader verwenden, um eine IEnumerable-Liste mit SQL Bulk Copy hinter den Kulissen in eine Datenbank zu schreiben. Sie können diese Bibliothek verwenden, um die Ergebnisse einer LINQ-Abfrage direkt in die Datenbank hochzuladen, da die Ergebnisse einer LINQ-Abfrage IEnumerable sind.
Da es LINQ-to-everything-Adapter gibt, können Sie Tricks wie die LINQ to CSV-Bibliothek um die Daten mithilfe einer LINQ-Abfrage aus einer CSV-Datei zu extrahieren, dann den LINQ-Entitätsdaten-Reader , um einen Bulk zu schreiben diese Daten direkt in die Datenbank.
Fallstudie:
Problem: Lesen Sie eine .csv-Datei schnell in eine Datenbank. Die Verbindung zur SQL-Datenbank erfolgt über LINQ-to-Entitys von C #.
Lösung 1: Verwenden Sie die LINQ to CSV-Bibliothek , erstellen Sie einen LINQ Abfrage, um die gewünschten Daten herauszuziehen, und schreiben Sie sie dann mit den LINQ-to-Entity-Standardaufrufen (ctx.AddObject (), ctx.SaveChanges () usw.). Benötigte Zeit: 30 Sekunden für 20.000 Datensätze, da LINQ für jeden einzelnen Datensatz eine Abfrage generiert (sloooooow !!!!!).
Lösung 2: Verwenden Sie die LINQ to CSV-Bibliothek , erstellen Sie einen LINQ Abfrage, um die gewünschten Daten in einen IEnumerable zu ziehen, verwenden Sie LINQ Entity Data Reader , um diese Daten direkt in das Ziel zu schreiben Datentabelle. Benötigte Zeit: 3 Sekunden für 20.000 Datensätze.
Lösung 3: Verwenden Sie eine gespeicherte Prozedur mit SQL "Massenkopie". Benötigte Zeit: 2 Sekunden für 20.000 Datensätze. Diese Lösung ist jedoch ziemlich spröde, da sie auf einer gespeicherten Prozedur beruht und SQL-Massenkopien mit einigen CSV-Dateiformaten nicht kompatibel ist. Diese Methode erfordert außerdem, dass Sie eine Zwischenspeichertabelle zwischen der tatsächlichen Zieltabelle und der CSV-Datei verwenden, um mit Dateiformatierungsproblemen umzugehen und bei der Normalisierung zu helfen.
Und hier ist der Quellcode für Lösung # 2:
%Vor%Tags und Links sql sql-server linq-to-entities ado.net wcf-data-services