实体框架删除非空外键控行

时间:2010-02-04 19:20:44

标签: entity-framework

我有一个类似于标准Product / OrderDetails / Order设置的模式。我想删除一个产品并级联删除所有引用该产品的OrderDetails。

假设我从业务规则的角度考虑过这个问题,那么使用Entity Framework 4处理这个问题最优雅的方法是什么?

1 个答案:

答案 0 :(得分:1)

首先是第一件事:

是否有任何理由on delete cascade在数据库级别不起作用?

如果真的不可能,您可以尝试以下方法:

由于ObjectContext没有DeleteAll样式方法......您可以随时实现自己的方式:

public static void DeleteAll(this ObjectContext context, 
    IEnumerable<Object> records)
{
    foreach(Object record in records)
    {
        context.DeleteObject(record);
    }
}

然后你可以写一些类似的东西(可能在一个Repository中):

context.DeleteAll(context.OrderDetails.Where(od => od.Product == product));

或者,要更清洁一点:

var toDelete = context.OrderDetails.Where(od => od.Product == product);

context.DeleteAll(toDelete);