1

我正在尝试按如下方式更新资源:

  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”关联集的关系处于“已删除”状态。给定多重约束,相应的“限制”也必须处于“已删除”状态。

我错过了什么?

4

2 回答 2

11

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

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

于 2011-01-17T12:13:15.100 回答
3

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

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

谢谢。

于 2011-04-04T12:10:39.910 回答