entity framework4从实体集合中删除对象

我有一个与“RequestProperty”实体具有1 .. *关系的“请求”实体。 所以在Request中有RequestProperty对象的集合。 当我更新“请求”时,我想删除RequestProperty EntityCollection中的所有项目,并从传入域对象中添加新项目。 当遍历Request.Properties集合并调用项目上的remove或DeleteObject时,枚举失败,因为集合已被修改。

截至目前我正在这样做:

 while (true) { if (newRequest.Properties.Count > 0) context.RequestPropertySet.DeleteObject(newRequest.Properties.First()); else break; } 

既然这不是很“酷”,我认为必须有另一种方式来清空一个关系集合。 谢谢你的想法。

答案取决于你build模实体的方式。 如果你正在使用普通的独立关系或外键关系,你将不得不使用你目前的方法 – 我也在我的项目中使用它。

如果您定义了标识关系,您将能够在收集时调用Clear @Craig所描述的。 识别关系是依赖实体的主键包含父实体的外键的特殊关系。

示例EF模型

该示例显示了使用外键标识它们之间的关系的Order实体和OrderItem实体。 OrderItem主键由唯一的IdOrderId组成,它是Order表的FK。 使用这种configuration,您不需要遍历OrderItem并单独删除每个项目。 从集合中简单地删除OrderItem将作为数据库中的删除来执行,清除集合将删除数据库中的所有相关OrderItem

使用Clear()方法:

 newRequest.Properties.Clear();