次の 2 つのエンティティがあるとします。
Item
int Id
ICollection<ChildItem> ChildItems
ChildItem
int Id
Item ParentItem
(削除時のカスケードは、EF デザイナーと SQL サーバーの両方で Item から ChildItem に設定されます)、次のようなコードがあります。
Item newItem = new Item();
ChildItem child1 = new ChildItem();
ChildItem child2 = new ChildItem();
newItem.ChildItems.Add(child1);
newItem.ChildItems.Add(child2);
myContext.Items.AddObject(newItem);
// Then much, much further down the line
myContext.Items.DeleteObject(newItem);
さて、EF は子項目も削除する必要があることを自動的に判断しますか、それとも自分で削除する必要がありますか?
問題は、DeleteObject の前に SaveChanges() を追加すると削除コードが正常に機能することですが、最初に削除しようとすると、変更を保存すると、「関連付けのプリンシパル エンドを特定できません」という例外が発生する傾向があります。 . これは、私が EF 4 でこのようなことを試みているということです。