2

現在使用しているLinqよりもかなり大量のデータ(〜50K行)を挿入するためのより優れた高速な方法を見つけようとしています。ローカル データベースに書き込もうとしているデータは、WCF からシリアル化されて受信された ORM マップ データのリストにあります。私は SqlBulkCopy を使用したいと思っていますが、問題は、テーブルが正規化されており、実際には 1 対多の関係を持つシーケンスまたは相互接続されたテーブルであることです。

私の要点を示すコードを次に示します。

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

dbAccess.InsertMeeting は次のようになります。

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

ご回答ありがとうございます。ボジャン

4

1 に答える 1

4

私は今でも、外部ファイルからファイルと同じ(フラットな)構造を持つステージングテーブルSqlBulkCopyにデータをすばやくコピーするために使用します(事前にそのテーブルを作成する必要があります)

ロードされたら、たとえばストアドプロシージャなどを使用して、データを複数のテーブルに分割できます。すべてがすでにサーバー上にあるため、かなり高速になります。

于 2010-06-09T13:56:06.153 に答える