4

我正在使用 POCO 生成的类 - 我可以以任何方式 tweek 模板,以便当我从子集合中删除时,删除的项目也会从数据库中删除?

或者也许在部分类中我可以覆盖一些东西,捕捉一个事件..?

基本上我希望 Order.OrderDetails.Remove(orderDetail) 从数据库中删除 orderDetail。

不想访问上下文并执行 context.OrderDetails.Delete(orderDetail)。

4

1 回答 1

1

当您从集合导航属性中删除对象时,Entity Framework 会删除对象之间的关系(将引用其父对象的子对象上的属性设为空)。

如果要删除一条记录,则需要将该对象标记为State = EntityState.Deleted。您可以通过访问上下文来做到这一点,或者如果您不想这样做,一种解决方法是识别在 ChangeTracker 中已成为孤立的子对象,并将它们的状态设置为已删除。

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 回答