我有一个类似于标准Product / OrderDetails / Order设置的模式。我想删除一个产品并级联删除所有引用该产品的OrderDetails。
假设我从业务规则的角度考虑过这个问题,那么使用Entity Framework 4处理这个问题最优雅的方法是什么?
答案 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);