1

以下のエンティティがあるとします。(簡潔にするために大幅に簡略化されていますが、主要なプロパティが含まれています)

public  class Crime 
{

       [Key]
       public int CrimeId {get;set;}
       public virtual ICollection<Victim> Victims {get;set;}
       public virtual CrimeDetail Detail {get;set}

}

public class Victim
{
       [Key]
       public int VictimId {get;set;}
       public string VictimCategory {get;set;}
}

public class CrimeDetail
{
       [Key]
       public int id {get;set;}
       public string DetailText {get;set;}
}

SQL Server 2008 Express R2 に挿入するこれらのレコードが 600,000 件以上ありますが、Entity Framework 4.4 を使用するとかなりの時間がかかります。

理想的には、これらのレコードをバッチ挿入するために使用したいのですSQLBulkCopyが、それは複雑な型をサポートしていないため (少なくともすぐに使用できるものではありません)、他の潜在的な解決策を見つけようとしています。

必要に応じて、モデルを変更することにオープンです。

編集: MSDN の AsDataReader Extension メソッドはこの場合に役立ちますか?

4

1 に答える 1

1

同じ問題が発生した場合、EF を使用してコード ファーストで生成されたデータベースと、SQLBulkCopy に使用される厳密に型指定された生成されたデータセットを使用することになります。

(これらのクラスを実際にコーディングしたことはありません。1〜10GBのxmlファイルのxsd定義からxsd utilを使用して生成されました。同じxsdから型付きデータセットを生成していないことを今思い出そうとしていますが、それはあなたの問題とは無関係のようです.)

これらの 600k 以上のレコードを取得する方法に応じて、生成された厳密に型指定されたデータセットを使用するようにコードを変更するか、オブジェクトからオブジェクトへのマッパーを使用して、EF POCO オブジェクトをデータセットにマップし、プロパティが同じ名前になるようにすることができます。

厳密に型指定されたデータセットの生成に関するリンクを次に示します。

SqlBulkInsertの使用例を次に示します。

于 2013-03-21T11:18:28.017 に答える