2011-06-16 103 views
2

我在EF4中使用POCO,并且从父项删除子对象时出现问题。考虑以下情形:在使用POCO时删除实体框架中的子对象

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

我需要从像一个Order对象删除OrderItem的:

myOrder.Items.Remove(0); 

我希望EF保持跟踪更改和删除相关的OrderItem的,当我打电话ObjectContext.SaveChanges ()。

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

有没有人有解决这个问题的工作?

干杯, MOSH

回答

1

不过,我已经意识到这不是 可能无需调用 Context.DeleteObject()。我相信这 不是一个真正的POCO方式,因为我的域名 模型不应该知道我的 持久性基础结构。

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

因此,您必须明确地告诉该项目应该从存储库中删除 - 对于内存中的存储库以及与持久性相关的存储库。您必须致电DeleteObject该项目,没有解决方法来避免这种情况。

0

什么参照完整性,你有没有在数据库中设置?你只要求从项目中删除orderitem - 不要删除,这就是发生了什么。