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

Entity framework 使用POCO时删除实体框架中的子对象,entity-framework,entity-framework-4,poco,Entity Framework,Entity Framework 4,Poco,我将POCO与EF4一起使用,从父对象中删除子对象时遇到问题。考虑下面的场景: public class Order { public List<OrderItem> Items { get; private set; } } 我希望EF在调用ObjectContext.SaveChanges()时跟踪更改并删除关联的OrderItem 但是,我意识到如果不调用Context.DeleteObject(),这是不可能的。我相信这不是真正的POCO方式,因为我的域模型不应该

我将POCO与EF4一起使用,从父对象中删除子对象时遇到问题。考虑下面的场景:

public class Order
{
     public List<OrderItem> Items { get; private set; }
}
我希望EF在调用ObjectContext.SaveChanges()时跟踪更改并删除关联的OrderItem

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

有人对这个问题有什么看法吗

干杯,
Mosh

您在数据库中设置了什么样的引用完整性?您只要求从项目中删除orderitem,而不是删除它,这就是正在发生的事情

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

我不会听你的解释。如果您有订单和订单项目的内存集合(忽略持久性基础结构),那么如果您仅从订单的项目集合中删除一个项目,或者同时从内存存储库中删除该项目,则会有所不同。您可能希望仅从一个订单中删除该项目,保留该项目并将其分配给另一个订单。(对于订单和订单项,这可能没有多大意义,但这是业务逻辑,您的POCO及其关系无法知道您每次从订单中删除该项时都要从存储库中删除该项。)

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

myOrder.Items.Remove(0);