Wie de-befestigen Sie ein Objekt aus einem Kontext, in Entity Framework?
Verwende ich das EF 4.1 mit dem Repository und DbContext.. POCO mit T4-Vorlage.
Für jedes Repository verwende ich eine separate DbContext.
Ich aktualisieren ein Objekt mit einer Eigenschaft, im moment habe ich diese Fehlermeldung erhalten
An entity object cannot be referenced by multiple instances of IEntityChangeTracker.
Ich nehme an, mein problem ist, beacuse eventObj
und candidate
erstellt werden, aus verschiedenen Repositories.
So, ich bin versucht zu lösen das problem mit diesem code, aber ohne Erfolg.
Meine Frage?
- Wie bekomme ich diesen Fehler loszuwerden?
-
Ist möglich, entfernen Sie die Kandidaten aus Ihrem Kontext?
public void UpdateAddingCandidate(Event eventObj, Candidate candidate){ Event updatedEvent = new Event(); Candidate updatedCandidate = new Candidate(); updatedEvent = eventObj; updatedCandidate = candidate; updatedEvent.Candidate = updatedCandidate; db.Entry(updatedEvent).State = EntityState.Modified; }
BEARBEITEN
public void UpdateAddingCandidate(Event eventObj, Candidate candidate)
{
/*
db.Events.AsNoTracking();
db.Candidates.AsNoTracking();
*/
db.Entry(eventObj).State = EntityState.Detached;
db.Entry(candidate).State = EntityState.Detached;
Event updatedEvent = new Event();
Candidate updatedCandidate = new Candidate();
updatedEvent = eventObj;
updatedCandidate = candidate;
updatedEvent.Candidate = updatedCandidate;
db.Entry(updatedEvent).State = EntityState.Detached;
db.Entry(updatedEvent).State = EntityState.Modified;
}
- Warum erstellen Sie neue Instanzen der Ereignis-und der Kandidat? Ich denke, dass sollte man nicht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser Fehler ist in der Tat ausgelöst, wenn die Person, die Sie versuchen zu aktualisieren, ist an eine andere objectcontext, als der Kontext, die Sie verwenden, um es zu aktualisieren. Nur eine objectcontext verfolgen können, ein Unternehmen
Du kannst Objekte aus seinem Kontext durch aufrufen:
wo ist der Kontext der Kontext die Person aktuell zugeordnet ist.
http://blogs.msdn.com/b/adonet/archive/2011/01/29/using-dbcontext-in-ef-feature-ctp5-part-4-add-attach-and-entity-states.aspx
Und in Ihrer Umsetzung:
Warum erstellen Sie neue Instanz von
Event
undCandidate
? Sie konnte nur ändern Sie den Status dieser Sie haben Sie bereits. Wenn Sie teilen sich die gleiche Instanz vonObjectContext
über Ihre repositories, können Sie versuchen, diese Einheiten aus dem Kontext mitObjectStateManager.GetObjectStateEntry(string key)
ObjectStateManager.