2017-11-01 19 views
0

テーブルに100,000以上の行を一括挿入する(新しい行が挿入されるたびに自動的にインクリメントするID列がある)。Entity Frameworkで一括挿入後にレコードを一括挿入してIDを取得する

  1. パフォーマンスの影響が最も少ない行を挿入する最も速い方法は何でしょうか?

  2. すべての行が挿入された後、最近挿入された行のIDのリストを取得するにはどうすればよいですか?

注:私は次のようでしたが、私はEntity FrameworkのにはBulk InsertありませんIDS

ctx.Documents.AddRange(documentsList); 
ctx.SaveChanges(); 

var ids = documentsList.Select(d => d.Id); 

おかげ

答えて

0

のリストを取得できませんでした。この種の操作を実行するには、サードパーティライブラリを使用する必要があります。

既定では、Entity Frameworkはすべてのエンティティが保存するデータベース往復を行います。したがって、あなたのシナリオでは、INSANELYが遅く、100,000を超えるデータベース往復が必要になります。


免責事項:私はEntity Framework Extensions

の持ち主だ。このライブラリはフリーではありませんが、あなたはBulkInsertを含むすべての一括操作を実行すると、自動的にId'sを返すことができます。またIncludeGraphオプションで関連するエンティティを挿入することができます。

  • バルク
  • 一括一括更新が
  • 一括マージ
  • 削除挿入

    • バルクのSaveChanges

    // Easy to use 
    context.BulkSaveChanges(); 
    
    // Easy to customize 
    context.BulkSaveChanges(bulk => bulk.BatchSize = 100); 
    
    // Perform Bulk Operations 
    context.BulkDelete(customers); 
    context.BulkInsert(customers); 
    context.BulkUpdate(customers); 
    
    // Customize Primary Key 
    context.BulkMerge(customers, operation => { 
        operation.ColumnPrimaryKeyExpression = 
         customer => customer.Code; 
    }); 
    

    EDIT:回答の質問

    私は一言でもEntity Framework Plus

    の持ち主だものを "EFプラス"

    と同じビットであり、私たちは自由に分割し、有料の機能を2つのライブラリに統合しました。 EF +はBulk Operationsをサポートしていません。それらは、同じビットBatch Delete

  • +0

    Batch Update

    ザ・のみ両方のライブラリは現在、共有機能ですされた「EFプラス」(http://entityframework-plus.net/)? –