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

本文关键字:关系 不支持 ChangeRelationsState 方法 定义 键值 | 更新日期: 2023-09-27 18:36:28

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

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

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

使用

外键值定义的关系不支持 ChangeRelationsState 方法。

澄清一下,我不想获取集合,因为它可能真的很大,而且我不想获取应该删除的实体。

我有"包含"应删除的实体的集合和键 (id) 的实体的键 (id)。

任何提示,如何正确操作?

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

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

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

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

  1. 使用 DbSet 重新创建要从集合中删除的实体。
  2. 使用要删除的实体的 id 填充重新创建的实体
  3. 使用 DbSet.Attach 附加实体
  4. 将实体添加到集合中,然后在 ObjectContext 上调用 AcceptAllChanges 以重置实体的状态
  5. 从集合中删除实体
  6. 调用保存更改,它应该发出更新语句以从集合中删除实体。

如果在实体上使用行版本控制/时间戳,则可以使用上述步骤,但在步骤 2 中,需要同时设置版本和 id。