Insertion rapide de tables de données relationnelles (normalisées) dans la base de données SQL Server 2008

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

Question

J'essaie de trouver un moyen plus rapide et meilleur pour insérer une quantité assez massive de données (environ 50 000 lignes) par rapport au Linq que j'utilise actuellement. Les données que j'essaie d'écrire sur une base de données locale figurent dans une liste de données mappées ORM sérialisées et reçues de WCF. J'adore utiliser SqlBulkCopy, mais le problème est que les tables sont normalisées et sont en fait une séquence ou des tables interconnectées avec des relations un à plusieurs.

Voici un code qui illustre mon propos:

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
                }
         }
    }

où dbAccess.InsertMeeting ressemble à ceci:

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

Merci d'avance pour n'importe quelle réponse. Bojan

Réponse acceptée

J'utiliserais encore SqlBulkCopy pour copier rapidement vos données du fichier externe dans une table de SqlBulkCopy ayant la même structure (plate) que le fichier (vous devrez créer cette table à l'avance).

Une fois chargé, vous pouvez fractionner les données sur plusieurs tables en utilisant, par exemple, une procédure stockée ou quelque chose du genre - cela devrait être assez rapide, car tout est déjà sur le serveur.



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi