实体框架4从实体集合中删除对象

时间:2011-02-07 14:10:07

标签: c# entity-framework-4

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

截至目前我正在这样做:

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

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

2 个答案:

答案 0 :(得分:21)

答案取决于您对实体进行建模的方式。如果您使用的是共同的独立关系或外键关系,则必须使用当前的方法 - 我在项目中也使用它。

如果您定义了识别关系,则可以在@Craig描述的集合中调用Clear。识别关系是特殊关系,其中从属实体的主键包含父实体的外键。

Example EF model

该示例显示Order实体和OrderItem实体,它们之间具有外键标识关系。 OrderItem的主键包含唯一的IdOrderId,它是Order表的FK。使用此配置,您无需迭代OrderItem并单独删除每个项目。只需从集合中删除OrderItem将在数据库中删除,清除集合将删除数据库中所有相关的OrderItem

答案 1 :(得分:1)

使用Clear()方法:

newRequest.Properties.Clear();