删除子对象

时间:2011-01-16 21:04:39

标签: entity-framework child-objects

我正在尝试更新资源,如下所示:

  public void Update(Resource resource) {

   Resource _resource = _resourceRepository.First(r => r.Id == resource.Id);

   _resource.Content = resource.Content;
   _resource.Description = resource.Description;
   _resource.Locked = resource.Locked;
   _resource.Name = resource.Name;

   _resource.Restrictions.ToList().ForEach(r => _resource.Restrictions.Remove(r));

   foreach (Restriction restriction in resource.Restrictions)
    _resource.Restrictions.Add(new Restriction { Property = _propertyRepository.First(p => p.Id == restriction.Property.Id), Value = restriction.Value });

  } // Update

我有类似的东西,并且正在努力创建一个只有一个区别的资源:我不删除限制。

我收到以下错误:

  

来自的关系   'Restrictions_ResourceId_FK'   AssociationSet在'已删除'中   州。鉴于多重性限制,   相应的“限制”必须   也处于'已删除'状态。

我错过了什么?

2 个答案:

答案 0 :(得分:11)

EF完全按照你的要求去做。从父对象导航集合中删除项目仅删除父对象和子对象之间的关系。这意味着它只将Restriction中的ResourceId设置为null,这是实体模型不允许的。

如果您的限制在没有相关资源的情况下不存在,则应将关系建模为识别。这意味着Restriction主键还将包含ResourceId列。然后,当您从父对象集合中删除限制时,EF将删除限制,而不是将ResourceId设置为null。

答案 1 :(得分:3)

我遇到了类似的问题,因为Add()的反面显然似乎是Remove()。

您必须使用DeleteObject()函数来删除子项。

感谢。