4

私は POCO で生成されたクラスを使用しています。子コレクションから削除すると、削除された項目も db から削除されるように、テンプレートを微調整する方法はありますか?

または、部分クラスで何かをオーバーライドして、イベントをキャッチすることもできます..?

基本的に、Order.OrderDetails.Remove(orderDetail) で orderDetail を db から削除したいと考えています。

コンテキストにアクセスしてcontext.OrderDetails.Delete(orderDetail)を実行したくありません。

4

1 に答える 1

1

コレクション ナビゲーション プロパティからオブジェクトを削除すると、Entity Framework はオブジェクト間の関係を削除します (親を参照する子オブジェクトのプロパティを null にします)。

レコードを削除する場合は、オブジェクトを State = EntityState.Deleted としてマークする必要があります。コンテキストにアクセスすることでこれを行うことができます。または、回避したくない場合は、ChangeTracker で孤立した子オブジェクトを特定し、そこで State を Deleted に設定することもできます。

var orphans = context.ChangeTracker.Entries().Where(e => e.State == EntityState.Modified && typeof(e.Entity) is ChildType);
foreach (DbEntityEntry orphan in orphans)
{
    orphan.State = EntityState.Deleted;
}
于 2012-12-20T19:15:36.347 に答える