我有一个与“RequestProperty”实体具有 1..* 关系的“请求”实体。所以在“请求”中有一个 RequestProperty 对象的集合。当我更新“请求”时,我想删除 RequestProperty EntityCollection 中的所有项目并从传入的域对象中添加新项目。当我遍历 Request.Properties
集合并对项目调用 remove 或 DeleteObject
时,枚举失败,因为集合已被修改。
到目前为止,我正在这样做:
while (true)
{
if (newRequest.Properties.Count > 0)
context.RequestPropertySet.DeleteObject(newRequest.Properties.First());
else
break;
}
因为这不是很“酷”,所以我认为必须有另一种方法来清空关系集合。谢谢你的想法。
最佳答案
答案取决于您为实体建模的方式。如果您使用公共(public)独立关系或外键关系,您将不得不使用您当前的方法 - 我也在我的项目中使用它。
如果您定义了识别关系,您将能够像@Craig 描述的那样在集合上调用Clear
。标识关系是依赖实体的主键包含父实体的外键的特殊关系。
该示例显示了 Order
实体和 OrderItem
实体,它们之间具有外键标识关系。 OrderItem
的主键由唯一的Id
和OrderId
组成,OrderId
是Order
表的外键。使用此配置,您无需遍历 OrderItem
并单独删除每个项目。简单地从集合中删除 OrderItem
将作为数据库中的删除执行,清除集合将删除数据库中所有相关的 OrderItem
。
关于c# - Entity Framework 4 从实体集合中删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4922228/