不允许添加与处于已删除状态的实体的关系
问题描述:
我试图通过以下方式在一对多关系中删除对实体的引用,但在尝试以下方式时收到错误将对象'o'附加到我的DbContext。错误是:不允许添加与处于已删除状态的实体的关系
“不允许添加与处于已删除状态的实体的关系。”
我自己也尝试在地方设置EntityState以下:
_db.OrganizationMetrics.Remove(om)
的是换掉这个正确的方式?
<HttpPost()>
Function Edit(ByVal ovm As OrganizationViewModel)
Dim o As Organization
o = AutoMapper.Mapper.Map(Of OrganizationViewModel, Organization)(ovm)
For Each om In o.OrganizationMetrics
_db.OrganizationMetrics.Attach(om)
If om.Value = "removeMe" Then
_db.Entry(om).State = EntityState.Deleted
ElseIf om.Id = 0 Then
_db.Entry(om).State = EntityState.Added
Else
_db.Entry(om).State = EntityState.Modified
End If
Next
_db.Organizations.Attach(o) 'Error is thrown here
If (ModelState.IsValid) Then
_db.Entry(o).State = EntityState.Modified
_db.SaveChanges()
Return RedirectToAction("Index")
Else
Return View(ovm)
End If
End Function
UPDATE:
这是我现在运行的代码。关键是要而不是将子实体从视图模型映射回父实体模型,以便我可以单独处理它们。
<HttpPost()>
Function Edit(ByVal ovm As OrganizationViewModel)
Dim o As Organization
o = AutoMapper.Mapper.Map(Of OrganizationViewModel, Organization)(ovm) //The Automapper code ignores the OrganizationMetrics members
_db.Organizations.Attach(o)
For Each om In ovm.OrganizationMetrics
_db.OrganizationMetrics.Attach(om)
If om.Value = "removeMe" Then
_db.Entry(om).State = EntityState.Deleted
ElseIf om.Id = 0 Then
_db.Entry(om).State = EntityState.Added
Else
_db.Entry(om).State = EntityState.Modified
End If
Next
If (ModelState.IsValid) Then
_db.Entry(o).State = EntityState.Modified
_db.SaveChanges()
Return RedirectToAction("Index")
Else
Return View(ovm)
End If
End Function
答
当您将o与_db.Organizations.Attach(o)
相加时,它会遍历其所有子项并发现其中一些子项已被删除。当它尝试附加它们时,会出现您显示的错误。它非常有意义。
退一步,找出你想要做什么。删除内容的最简单方法是获取并删除它。喜欢的东西:
context.DeleteObject(context.MyEntity.Single(r => r.Id == myId));
如果你愿意,你可以只用其关键嘲笑MyEntity
对象,然后删除该对象时,它也能发挥作用,并节省您选择查询。
我认为这就是“_db.OrganizationMetrics.Remove(om)”会为我做的,但该行代码会导致相同的错误。我想要做的是循环ViewModel中返回的OrganizationMetric实体,并删除用户删除的任何内容(它们不会从该模型中删除,只是标记为删除,因此我可以将它们删除控制器) – 2011-05-25 20:43:43
我最终做的是多步骤:1)我没有将子实体映射回父实体模型2)我遍历ViewModel中的子实体,逐个添加它们,并添加或者根据需要从上下文中删除它们3)最后附加父实体,没有与其关联的“子”。我用我的功能代码更新了这个问题。 – 2011-05-26 14:53:57