2016-09-04 4 views
2

私は現在EntityFramework.BulkInsertで遊んでいます。C#&EF:bulkinsert関連オブジェクト

シンプルな挿入(1600秒の1.000.000行)のパフォーマンスに本当に役立ちますが、複数のテーブルにマップされたオブジェクトの挿入に関する情報はありません。それに関連する唯一の事は、それが不可能であるという公式ウェブサイトからの古い(2014年)の話題です。これはまだ実際ですか?

もしそうなら、よい回避策がありますか?

+0

残念ながら.... alternatveは一括挿入拡張であり、同じトランザクション内ですべてを手動で更新します。 – ESG

答えて

1

EntityFramework.BulkInsertは、シンプルなシナリオをサポートする非常に優れたライブラリです。しかし、ライブラリは限られており、もはやサポートされていません。

これまでのところ、1つの回避策があり、すべてをサポートするライブラリを使用しています。

免責事項:私はこのライブラリは、すべての団体や相続などのすべてをサポートしているプロジェクトEntity Framework Extensions

の持ち主です。

例として、異なるテーブルに複数のエンティティを保存する場合、BulkSaveChangesはSaveChangesとまったく同じように動作しますが、速い方法で使用できます。

// Easy to use 
context.BulkSaveChanges(); 

// Easy to customize 
context.BulkSaveChanges(bulk => bulk.BatchSize = 100); 

ライブラリーは、挿入するだけではありません。 BulkMerge

しかしEntityFramework.BulkInsertとは異なり、このライブラリは無料ではありません

  • のbulkdelete
  • BulkUpdate
    • BulkInsert
    • :それはすべての一括操作をサポートしています。

      EDIT:回答設問

      あなたは道より速く言う - あなたが任意のメトリックまたはメトリック

      @マークへのリンクを持っている:あなたは、当社のウェブサイトhomepageにメトリックに見ることができます。 BulkSaveChangesがSaveChangesより少なくとも15倍高速であると報告しています。

      ただし、メトリックは大きく偏っています。あまりにも多くのものがインデックス、トリガー、待ち時間などに影響を与える可能性があります!

      多くの場合、25x、50x、80xのパフォーマンス改善が報告されています。

      ベンチマークを実行するときに人々がよく忘れることの1つは、JITコンパイルのテストの前に一度ライブラリを呼び出すことです。 Entity Frameworkと同様に、ライブラリへの最初のヒットは数msかかることがあります。

    +0

    あなたは*早く言っています* - メトリクスやメトリクスへのリンクはありますか?ちょっと興味があるんだけど –

    1

    バルク挿入の問題があった場合は、EFを使用しません。 EFは、アプリケーションの通常の使用中にエンティティを表すオブジェクトをマップするためのものです。特定のトランザクションが本当に1つのエンティティにしか触れないようにする必要があります(実体が合理的な一貫性境界の周りに設計されていると仮定します)。

    多くのデータを(インポート/エクスポート/変換などで)移動していた場合は、SQLをより直接的に使用し、より多くの制御ができます。

    関連する問題