ここでちょっとした問題があります。私は多くの SO スレッドを読みましたが、答えが見つかりませんでした。
Code First EFを利用して、データアクセスに切断されたリポジトリパターンを使用しています。
POCO:
public class LineItem
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public ICollection<LineItemCategoryMap> LineItemCategoryMaps { get; set; }
}
public class LineItemCategoryMap
{
[Key]
public int Id { get; set; }
[ForeignKey("LineItem")]
public int LineItemId { get; set; }
public LineItem LineItem { get; set; }
[ForeignKey("Category")]
public int CategoryId { get; set; }
public Category Category { get; set; }
}
データ アクセス コード (更新):
public void Update(LineItem lineItem)
{
using (var db = new DBContext())
{
db.LineItems.Attach(lineItem);
db.Entry(lineItem).State = EntityState.Modified;
db.SaveChanges();
}
}
単一の LineItemCategoryMap がある場合、更新は機能します。ただし、同じ LineItemID を持つ 2 つのアイテムがある場合、「同じキーを持つオブジェクトが ObjectStateManager に既に存在します」という例外が発生します。投げられます。
複数のマップ オブジェクトを含む LineItem の作成は 100% 機能します
ご覧のとおり、LineItem は複数回アタッチしようとしています。LineItem を再利用するべきではありませんか?