使用POCO时删除实体框架中的子对象

时间:2011-06-16 08:52:20

标签: entity-framework entity-framework-4 poco

我正在使用POCO和EF4,并且从父级删除子对象时出现问题。请考虑以下情形:

public class Order
{
     public List<OrderItem> Items { get; private set; }
}

我需要从Order对象中删除OrderItem,如:

myOrder.Items.Remove(0);

我希望EF在跟踪ObjectContext.SaveChanges()时跟踪更改并删除关联的OrderItem。

但是,我已经意识到,如果不调用Context.DeleteObject(),这是不可能的。我认为这不是真正的POCO方式,因为我的域模型不应该知道我的持久性基础架构。

有没有人解决这个问题?

干杯, MOSH

2 个答案:

答案 0 :(得分:1)

  

然而,我意识到这不是   可以不打电话   Context.DeleteObject()。我相信这一点   不是我的域名真正的POCO方式   模特不应该知道我的   持久性基础设施。

我不会按你的解释。如果您有订单和订单商品的内存中集合(忽略持久性基础架构),那么如果您只从订单的项目集合中删除项目,或者您还从内存存储库中删除该项目,则会有所不同。您可能只想从一个订单中删除该项目,保持其存在并将其分配给另一个订单。 (在订单和订单商品的情况下,它可能没有多大意义,但是这是业务逻辑,并且您的POCO及其关系无法知道您每次从订单中删除时都要从存储库中删除该项目。)

因此,您必须明确说明该项应该从存储库中删除 - 对于内存存储库以及与持久性相关的存储库也是如此。您必须为该项目调用DeleteObject,没有解决方法可以避免这种情况。

答案 1 :(得分:0)

您在数据库中设置了哪些参照完整性?您只是要求从项目中删除orderitem - 而不是删除它,这就是正在发生的事情。