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; }
}
EFを使用する必要があります。私はそれぞれの "A"が "B"であるすべての子を追加しようとしています。 "B"は階層の終わりまで "C"の子をすべて追加し、次にSaveChangesを打つと)、エラーが発生しました "FOREIGN KEY制約FK_dbo.E_dbo.D_DIdと競合しました。競合がデータベース" TestDatabase "、テーブル" dbo.D "、列 'Id'で発生しました。 – legios
IDENTITYカラムを使用する場合は、SaveChangesを呼び出してデータベース作成IDを取得する必要があります(場合によっては、DbTransactionですべてをラップする) – ErikEJ