Hinzufügen einer Beziehung mit einer Entität, die in den Gelöschten Zustand ist nicht erlaubt
Ich versuche mich zu entfernen, ein Verweis auf eine Entität in einer Eins-Zu-Viele-Beziehung in der folgenden Weise, aber erhalte eine Fehlermeldung, wenn ich versuche, an das Objekt 'o' zu meinem DbContext. Der Fehler ist:
"Hinzufügen einer Beziehung mit einer Entität, die in den Gelöschten Zustand ist nicht zulässig."
Ich habe auch versucht, die folgenden an Stelle der Einstellung der EntityState:
_db.OrganizationMetrics.Remove(om)
Was ist der richtige Weg, um diese zu entfernen?
<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:
Dies ist nun mein funktionierender code. Der Schlüssel ist, um nicht Karte die Kinder Entitäten zurück zum übergeordneten entity-Modell aus dem view-Modell, so dass ich kann sich mit Ihnen individuell.
<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
InformationsquelleAutor Ben Finkel | 2011-05-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beim anfügen o mit
_db.Organizations.Attach(o)
geht es durch alle Ihre Kinder und findet, dass einige von Ihnen werden gelöscht. Wenn es versucht, um Sie zu befestigen, erhalten Sie die Fehlermeldung Sie sind zeigt. Es macht auch Sinn.Schritt zurück und herauszufinden, was es ist, Sie tun möchten. Der einfachste Weg, um etwas zu löschen, ist, es zu erhalten und dann es löschen. So etwas wie:
Wenn Sie wollen, können Sie die verspotten, die
MyEntity
Objekt nur mit seinem Schlüssel, und löschen Sie dann das Objekt, es wird so gut funktionieren und sparen Sie eine select-Abfrage.Was habe ich am Ende dabei ist in mehreren Schritten: 1) ich habe keine Karte die Kinder Entitäten zurück zum übergeordneten entity-Modell 2) ich Durchlaufen und die Kinder-Einrichtungen in der ViewModel, befestigen Sie Sie eins nach dem anderen, und fügen Sie hinzu oder entfernen Sie Sie aus dem Kontext-wie erforderlich 3) Befestigen Sie die Eltern-Einheit Letzte, die keine "Kinder" zugeordnet. Ich habe aktualisiert die Frage mit meinem funktionierenden code.
InformationsquelleAutor Milimetric