我正在尝试更新资源,如下所示:
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在'已删除'中 州。鉴于多重性限制, 相应的“限制”必须 也处于'已删除'状态。
我错过了什么?
答案 0 :(得分:11)
如果您的限制在没有相关资源的情况下不存在,则应将关系建模为识别。这意味着Restriction主键还将包含ResourceId列。然后,当您从父对象集合中删除限制时,EF将删除限制,而不是将ResourceId设置为null。
答案 1 :(得分:3)
我遇到了类似的问题,因为Add()的反面显然似乎是Remove()。
您必须使用DeleteObject()函数来删除子项。
感谢。