我有一个“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;
}
由于这不是真的“酷”,我认为必须有另一种方法来清空一个关系的集合。谢谢你的想法。
答案 0 :(得分:21)
答案取决于您对实体进行建模的方式。如果您使用的是共同的独立关系或外键关系,则必须使用当前的方法 - 我在项目中也使用它。
如果您定义了识别关系,则可以在@Craig描述的集合中调用Clear
。识别关系是特殊关系,其中从属实体的主键包含父实体的外键。
该示例显示Order
实体和OrderItem
实体,它们之间具有外键标识关系。 OrderItem
的主键包含唯一的Id
和OrderId
,它是Order
表的FK。使用此配置,您无需迭代OrderItem
并单独删除每个项目。只需从集合中删除OrderItem
将在数据库中删除,清除集合将删除数据库中所有相关的OrderItem
。
答案 1 :(得分:1)
使用Clear()
方法:
newRequest.Properties.Clear();