c# - Entity Framework 4 从实体集合中删除对象

标签 c# entity-framework-4

我有一个与“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。标识关系是依赖实体的主键包含父实体的外键的特殊关系。

Example EF model

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

关于c# - Entity Framework 4 从实体集合中删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4922228/

相关文章:

entity-framework-4 - Entity Framework 4 Code First 和 new() 运算符

entity-framework - 多对多关系检测变化

c# - 图片框 C# 中的圆角边缘

c# - ReSharper 代码清理

c# - 是否可以在.Net 3.5中运行 Entity Framework 4.1

entity-framework - EF 4.1,POCO : Is any way to get Table name in runtime to avoid hardcode?

c# - 防止 EF 5 生成属性

c# - winforms 数据绑定(bind)仅适用于开发机器

c# - 制作混合数组变量?

c# - Entity Framework - 使用 Web.Config 连接字符串