0

私はEntity FrameworkとSQL Server Compactを使用した最初のプロジェクトを持っています。Entity Frameworkでのデータベース挿入パフォーマンスを向上させる方法

データベースには、すべてが他のテーブルへの外部キーを持つ約15個のテーブルがあります。 何千ものXMLファイルを読み込んで、そのデータをデータベースにインポートする必要があります。データベース構造は、XMLファイル構造を反映します。最大5レベルの表階層があります。だから、 "トップ"テーブルの各レコードのために、私は基になるテーブルに1つ以上を挿入する必要があります。

エンティティフレームワークを挿入に使用していますが、正常に動作しますが、パフォーマンスは非常に悪いです:(。 主な問題は、ほとんどのレコードではIDが読み取られなければならないということです基礎となる表

他の事はつまり - 。私は右知っていれば - 。?Entity Frameworkのは、別のコマンドを使用して、各レコードを挿入することを

劇的にパフォーマンスを向上させる方法はあり

はあなたに

ありがとう
+0

パフォーマンスが問題になる場合、最も簡単な回避策は手動SQLクエリです。 – Kilazur

+0

これは1回(初期化)アクションですか? SQL Serverのすべての制約を無効にすることができます。これにより、パフォーマンスが向上します。ただし、有効なデータのみを挿入するようにしてください。挿入後、再度制約を有効にします。 –

答えて

0

SQL Compact Bulk Insert Libraryライブラリを使用して、データをバルクに挿入します。

あなたはすべてのレコードを更新する必要がある場合は、このテクニックを使用します。

  1. 保存を実行して、ステージング表
  2. に挿入バルクにライブラリを使用してデータベースに
  3. をステージング表を作成します。ステージング・テーブルから読み取り、ターゲット・テーブルのレコードを更新して更新を行う手順。
+0

そのヒントありがとうございます。私が知らないのは、挿入された行のIDをどのように取得するのでしょうか?他のテーブルに挿入するための参照としてそれらを必要とします。 – BitEater

+0

キー値を事前に設定し、使用するオプションを設定することができます。INDENTITY_INSERT ON – ErikEJ

0

まず、AddRangeまたは代替ソリューションを使用して、DetectChangesメソッドのパフォーマンスが低下しないようにしてください。

参照:http://entityframework.net/improve-ef-add-performance

免責事項:私はデフォルトでSQL Server Compactの

を含むすべての主要なプロバイダーEntity Framework Extensions

このライブラリのサポートの所有者だ、BulkInsertは自動的にIDを取得します挿入された行の

このライブラリは、あなたがあなたのシナリオに必要なすべての一括操作を実行することができます:

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

    • バルクの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; 
    }); 
    
  • +0

    ありがとうございます。 Entity Frameworkの問題を解決できるかもしれませんが、CodingYoshiのソリューションは私の場合は実装が簡単です。 – BitEater

    関連する問題