Inserimento rapido di tabelle di dati relazionali (normalizzate) nel database di SQL Server 2008

c# linq-to-sql performance sqlbulkcopy sql-server-2008

Domanda

Sto cercando di trovare un modo migliore e più veloce per inserire una quantità enorme di dati (~ 50K righe) rispetto al Linq che sto usando ora. I dati che sto cercando di scrivere su un db locale si trovano in un elenco di dati mappati ORM serializzati e ricevuti da WCF. Sono appassionato di usare SqlBulkCopy, ma il problema è che le tabelle sono normalizzate e in realtà sono una sequenza o tabelle interconnesse con relazioni uno-a-molti.

Ecco un codice che illustra il mio punto:

foreach (var meeting in meetingsList)
    {
         int meetingId = dbAccess.InsertM(value1, value2...);
         foreach (var competition in meeting.COMPETITIONs)
         {
                int competitionId = dbAccess.InsertC(meetingid, value1, value2...);
                foreach(var competitor in competition.COMPETITORs)
                {
                       int competitorId = dbAccess.InsertCO(comeetitionId, value1,....)
                       // and so on
                }
         }
    }

dove dbAccess.InsertMeeting ha un aspetto simile al seguente:

// check if meeting exists
int  meetingId = GetMeeting(meeting, date);

if (meetingId == 0)
{
   // if meeting doesn't exist insert new
   var m = new MEETING
   {
       NAME = name,
       DATE = date
   }
   _db.InsertOnSubmit(m);
   _db.SubmitChanges();
}

Grazie in anticipo per le risposte. Bojan

Risposta accettata

SqlBulkCopy comunque SqlBulkCopy per copiare rapidamente i dati dal file esterno in una tabella di staging che ha la stessa struttura (piatta) del file (sarà necessario crearla in anticipo)

Una volta caricato, è possibile suddividere i dati su più tabelle utilizzando, ad esempio, una stored procedure o qualcosa del genere - dovrebbe essere abbastanza veloce poiché tutto è già presente sul server.



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow