代码之家  ›  专栏  ›  技术社区  ›  Jon Galloway

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

  •  0
  • Jon Galloway  · 技术社区  · 15 年前

    我有一个类似于标准产品/订单详细信息/订单设置的模式。我要删除单个产品并级联删除引用该产品的所有订单详细信息。

    假设我已经从业务规则的角度考虑过这一点,那么用实体框架4处理这一点的最优雅的方法是什么?

    1 回复  |  直到 15 年前
        1
  •  1
  •   Justin Niessner    15 年前

    首先是第一件事:

    有什么理由吗 on delete cascade 在数据库级别不起作用?

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

    自从 ObjectContext 没有一个 DeleteAll 样式方法…您可以始终实现自己的:

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

    然后您可以编写类似的内容(可能在存储库中):

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

    或者,稍微干净一点:

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