2017-02-03 5 views
0

私はデータベースにこれらのモデルを持っています。そして、私はこれらのモデルと関係を表すPOCOのコレクションを持っています。私はそれらをデータベースに追加し、それらの間の関係を作成する必要があります。すべてのオブジェクト数は200kに似ています。これを行う最も効率的な方法は何ですか?EntityFrameworkネストされたエンティティを素早く追加する

public class A 
{ 
    private ICollection<B> children; 

    public A() 
    { 
     this.children = new HashSet<B>(); 
    } 

    public int Id { get; set; } 

    public virtual ICollection<B> Children 
    { 
     get { return this.children; } 
     set { this.children = value; } 
    } 
} 

public class B 
{ 
    private ICollection<C> children; 

    public B() 
    { 
     this.children = new HashSet<C>(); 
    } 

    public int Id { get; set; } 

    public int AId { get; set; } 

    public virtual A A { get; set; } 

    public virtual ICollection<C> Children 
    { 
     get { return this.children; } 
     set { this.children = value; } 
    } 
} 

public class C 
{ 
    private ICollection<D> children; 

    public C() 
    { 
     this.children = new HashSet<D>(); 
    } 

    public int Id { get; set; } 

    public int BId { get; set; } 

    public virtual B B { get; set; } 

    public virtual ICollection<D> Children 
    { 
     get { return this.children; } 
     set { this.children = value; } 
    } 
} 

public class D 
{ 
    private ICollection<E> children; 

    public D() 
    { 
     this.children = new HashSet<E>(); 
    } 

    public int Id { get; set; } 

    public int CId { get; set; } 

    public virtual C C { get; set; } 

    public virtual ICollection<E> Children 
    { 
     get { return this.children; } 
     set { this.children = value; } 
    } 
} 

public class E 
{ 
    public int Id { get; set; } 

    public int DId { get; set; } 

    public virtual D D { get; set; } 
} 

答えて

0

あなたは、最速の方法を意味し、生のADO.NETを使用して、でも、SqlBulkCopyを使用することを検討している場合。

BULK COPYではなく、生のADO.NETでTVPを使用することも考えられます

+0

EFを使用する必要があります。私はそれぞれの "A"が "B"であるすべての子を追加しようとしています。 "B"は階層の終わりまで "C"の子をすべて追加し、次にSaveChangesを打つと)、エラーが発生しました "FOREIGN KEY制約FK_dbo.E_dbo.D_DIdと競合しました。競合がデータベース" TestDatabase "、テーブル" dbo.D "、列 'Id'で発生しました。 – legios

+0

IDENTITYカラムを使用する場合は、SaveChangesを呼び出してデータベース作成IDを取得する必要があります(場合によっては、DbTransactionですべてをラップする) – ErikEJ

関連する問題