Inserción rápida de tablas de datos relacionales (normalizadas) en la base de datos de SQL Server 2008

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

Pregunta

Estoy tratando de encontrar una forma mejor y más rápida de insertar una cantidad de datos bastante masiva (~ 50K filas) que el Linq que estoy usando ahora. Los datos que estoy tratando de escribir en una base de datos local están en una lista de datos mapeados ORM serializados y recibidos de WCF. Estoy interesado en usar SqlBulkCopy, pero el problema es que las tablas están normalizadas y en realidad son una secuencia o tablas interconectadas con relaciones de uno a varios.

Aquí hay un código que ilustra mi 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
                }
         }
    }

donde dbAccess.InsertMeeting se ve algo como esto:

// 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();
}

Gracias de antemano por cualquier respuesta. Bojan

Respuesta aceptada

Todavía usaría SqlBulkCopy para copiar rápidamente sus datos del archivo externo en una tabla de preparación que tiene la misma estructura (plana) que el archivo (deberá crear esa tabla antes de tiempo)

Una vez que se haya cargado, puede dividir los datos en varias tablas utilizando, por ejemplo, un procedimiento almacenado o algo así: debería ser bastante rápido ya que todo está en el servidor.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué