0

私は Entity Framework 4.4 を使用しており、次のような 1 対多の関係モデルがあります。

class A { 
   public int Id { get; set; }
   public virtual B { get; set; }
   public int BId;
}
class B {
   public Id { get; set; }
   private ICollection<A> _As;
   public virtual ICollection<A> As
   {
      get { return _As ?? (_As = new HashSet<A>()); }
      protected set { _As = value; }
   }
}

ここで、同じ B インスタンスを持つ 2 つの A インスタンスがあるとします。次に、次のようなものがあります(JSON表現):

A: { Id: 1, BId: 1, B: { Id: 1, As: [ 1, 2 ] } }
A: { Id: 2, BId: 1, B: { Id: 1, As: [ 1, 2 ] } }

次に、A インスタンスの現在のリストを循環し、db コンテキストに追加します。

foreach (var a in LocalAList)
{ 
   dbContext.Add(a);
   dbContext.SaveChanges();
}

問題は、重複したオブジェクトを挿入したことを知らせる例外が発生することです。私は周りを見回して、エンティティの変更と添付ファイルを扱っていることを見つけましたが、私はまだEFにかなり慣れていません。これは典型的なことであり、オブジェクトが既に存在する場合にオブジェクトの挿入を処理するためのイディオムがあると思います。

重複の追加を回避しながら、コンテキストに新しいオブジェクトを効率的に追加するにはどうすればよいですか? 重複した例外をキャプチャして無視する必要がありますか? 確認する良い方法はありますか?

4

1 に答える 1

2

データベースに a が既に存在するかどうかを確認する簡単なテストを実行できます。最も簡単なテストは、Id が 0 であるかどうかを確認することです。これは、A が DB に追加されると、ID がエンティティに与えられるためです。その時点で、再度追加するのではなく、単に再接続する必要があります

例:

foreach (var a in LocalAList)
{ 
  if (a.Id == 0)
    dbContext.Add(a);
   else 
    dbContext.As.Attach(a)

   dbContext.SaveChanges();
}
于 2013-03-05T18:00:46.880 に答える