使用外键值定义的关系不支持ChangeRelationshipState方法

时间:2015-01-05 12:51:53

标签: c# .net entity-framework

在EF 6中,要从集合中删除实体而不实际获取集合,我使用:

manager.ChangeRelationshipState(entity, wrappedIdOfRelatedEntity, e => e.Collection, EntityState.Deleted);

适用于M:N关系。但是在1:N的情况下,它会抛出以下错误:

  

使用外键值定义的关系不支持ChangeRelationshipState方法。

为了澄清,我不想获取该集合,因为它可能非常庞大,而且我不想获取应该删除的实体。

我拥有'包含'的实体的密钥(id)。应删除的实体的集合和键(ID)。

任何提示,如何正确地做到这一点?

注意:只需将包装的实体键添加到集合即可添加。但删除导致问题。

1 个答案:

答案 0 :(得分:0)

您是否在实体上使用行版本控制/时间戳?如果这样做,EF需要版本,因为它正在发送包含要删除的实体的id和版本的更新语句。

如果您未在实体上使用行版本控制/时间戳,则可以使用DbContext API执行以下操作,但需要使用代理并更改检测。

  1. 使用DbSet.Create
  2. 重新创建要从集合中删除的实体
  3. 使用您要删除的实体的ID填充重新创建的实体
  4. 使用DbSet.Attach
  5. 附加实体
  6. 将实体添加到集合中,然后在ObjectContext上调用AcceptAllChanges以重置entites的状态
  7. 从集合中删除实体
  8. 调用保存更改,它应发出更新语句以从集合中删除实体。
  9. 如果您在实体上使用行版本控制/时间戳,则可以使用上述步骤,但在步骤2中,您需要同时设置版本和ID。