0
for (int i = 0; i < 1000; i++) 
{ 
     PrivateMessage privateMessage = new PrivateMessage() 
     { 
      id=i 
     }; 
     dc.PrivateMessages.InsertOnSubmit(privateMessage); 
     dc.SubmitChanges(); 
} 

この方法は1000レコードを挿入するのに適していますか?LINQを使用して1000レコードを挿入

これを行うより良い方法がありますか?

+3

はい、より良い方法がある。この種の仕事のためにLINQを使用しないでください。これのために設計されていません。バルク挿入には 'SqlBulkCopy'コンポーネントを使います。 –

+1

私は、挿入にLINQを使用しないことを考えます。代わりに、SqlBulkCopyのようなものを見ることができます。パフォーマンス上の理由から、私は自分のアプリケーションからLINQのインサートをいくつか削除し、代わりに一括コピーを行う必要がありました。もちろん、私は100万のレコードを扱っていました... –

+0

SqlBulkCopyはこれを行うためのより良い方法です。 SqlBulkCopyの利点の代わりにSqlBulkCopyを使用することを検討する必要があります – kenwarner

答えて

3

あなたのループでInsertOnSubmitを実行するのはおそらく最高です。試してみてください:

List<PrivateMessage> messages = new List<PrivateMessage>(); 

for (int i = 0; i < 1000; i++) 
{ 
    messages.Add(new PrivateMessage() { id=i }); 
} 

dc.PrivateMessages.InsertAllOnSubmit(messages); 
dc.SubmitChanges(); 
1

にはループ外にdc.SubmitChanges()があります。

for (int i = 0; i < 1000; i++) 
{ 
      PrivateMessage privateMessage = new PrivateMessage() 
      { 
       id=i 
      }; 
      dc.PrivateMessages.InsertOnSubmit(privateMessage); 
} 
      dc.SubmitChanges(); 
1

をここで別の一つだ:

Enumerable.Range(1, 1000).ToList().ForEach(x =>    
      dc.PrivateMessages.InsertOnSubmit(new PrivateMessage(){id=x})); 
dc.SubmitChanges(); 
関連する問題