2016-08-02 7 views
0

Ich habe den ganzen Tag nach einer Lösung gesucht, aber ich konnte keine finden. Ich bin auf der Suche nach etwas Hilfe.Wie fügt man das Volumen in Entity Framework v4 ein?

Ich habe drei Tabellen zum Speichern von Gruppen & ihre Kontakte in meiner Datenbank. Der Einfachheit halber betrachten ihren Namen als table_1, table_2 & table_3

table_1 (Gruppe Tabelle)

+----------+------+ 
| Group_Id | Name | 
+----------+------+ 
|  1 | A | 
|  2 | B | 
|  3 | C | 
+----------+------+ 

table_2 (Kontakt Tabelle):

+------------+-------+--------+ 
| Contact_Id | name | number | 
+------------+-------+--------+ 
|   1 | Jack | 123 | 
|   2 | Sam | 456 | 
|   3 | Alice | 789 | 
+------------+-------+--------+ 

table_3 (Junction Tabelle)

+-----------------+----------+------------+ 
| ContactGroup_Id | Group_Id | Contact_Id | 
+-----------------+----------+------------+ 
|    1 |  1 |   1 | 
|    2 |  2 |   2 | 
|    3 |  2 |   3 | 
+-----------------+----------+------------+ 

Jetzt lese ich Excel-Datei in meiner Webanwendung und t Hinzufügen von Massenkontakten zur Datenbank. Mit EF4, ist es das, was ich versuche zu tun: Jetzt

using (TransactionScope obj = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted, Timeout = TransactionManager.MaximumTimeout })) 
{ 
    for (int i = 1; i < totalrows; i++) 
    { 
    table_2 objTable_2 = new table_2(); 
    objTable_2.name = "ABC"; 
    objTable_2.number= "999"; 
    entity.table_2.AddObject(objTable_2); 
    entity.SaveChanges(); 

    table_3 objTable_3 = new table_3(); 
    objTable_3.Group_Id = "1"; 
    objTable_3.Contact_Id = objTable_2.Contact_Id; 
    entity.table_3.AddObject(objTable_3); 
    entity.SaveChanges(); 
    } 
} 

wie man sehen kann ich entity.SaveChanges() die automatisch generierte PK von table_2 zu bekommen jedes Mal, rufen in table_3 einzufügen. Dies zu tun für Hunderte oder Tausende von Datensätzen verlangsamt wirklich meine Anwendung und ich weiß, dass dies eine schlechte Möglichkeit ist, dies zu tun.

Gibt es noch andere Arbeiten dafür? wenn ich dies mit einer Bulk-Insertion-Erweiterung von Drittanbietern tun oder SaveChanges() nach jeweils ein paar hundert Datensätze aufrufen, wie bekomme ich dann automatisch generierte PK für table_2 in table_3 einfügen?

+0

Haben Sie ein Blick auf meine aktualisierte Antwort? Betrachten Sie es als Lösung, wenn es geholfen hat – bsoulier

Antwort

0

Werfen Sie einen Blick auf this extension für Entity Framework, die mit EF von Version 4.x zu 6.x kompatibel ist.

Ich habe es ein paar Mal verwendet, und es funktioniert ziemlich gut.

Edit:

von iserting items within a stored procedure die PK Ausgabe Solving, alle Einsätze von ihm in einem Aufruf zu tun, Tausende von Umläufen zwischen .NET-Code Umgang mit Einsätzen und SQL Server zu vermeiden

+0

Ich weiß über diese Erweiterung, aber es löst nicht mein automatisch generiertes PK-Problem. – NewbieProgrammer

+0

Entschuldigung dafür, dass Sie Ihr Problem falsch gelesen haben. Ich würde sagen, dass Sie in diesem Fall eine Stored Procedure erstellen sollten. Dies würde alle Schritte auf einmal erledigen und alle Roundtrips zwischen Ihrer App und Ihrer db entfernen. – bsoulier

+0

Ich verstehe. Aber wenn ich 10000 Kontakte verarbeiten muss, muss ich gespeicherte Prozedur 10.000 Mal ausführen. Recht? wird das nicht dasselbe sein (in Bezug auf die Leistung). Und was ist mit Transaktion? Wie kann ich das in der gespeicherten Prozedur für alle Datensätze tun? – NewbieProgrammer

Verwandte Themen