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

hoe*_*etz 14 c# entity-framework-4

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

截至目前我正在这样做:

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

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

Lad*_*nka 21

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

如果你定义了识别关系,你就可以Clear像@Craig所描述的那样只在集合上调用.识别关系是特殊关系,其中从属实体的主键包含父实体的外键.

示例EF模型

该示例显示了具有外键标识关系的Order实体和OrderItem实体.主键OrderItem由唯一Id和表OrderIdFK组成Order.使用此配置,您无需迭代OrderItems并单独删除每个项目.只需OrderItem从集合中删除将在数据库中执行删除,清除集合将删除OrderItem数据库中的所有相关内容.