Es gibt keine Detach(object entity)
auf der DbContext
.
Kann ich zuerst Objekte im EF-Code trennen?
Es gibt keine Detach(object entity)
auf der DbContext
.
Kann ich zuerst Objekte im EF-Code trennen?
Antworten:
Wenn Sie ein vorhandenes Objekt entfernen möchten, befolgen Sie die Anweisungen von @ Slauma. Wenn Sie Objekte laden möchten, ohne Änderungen zu verfolgen, verwenden Sie:
var data = context.MyEntities.AsNoTracking().Where(...).ToList();
Wie im Kommentar erwähnt, werden Entitäten dadurch nicht vollständig getrennt. Sie sind immer noch angehängt und das verzögerte Laden funktioniert, aber Entitäten werden nicht verfolgt. Dies sollte beispielsweise verwendet werden, wenn Sie eine Entität nur zum Lesen von Daten laden möchten und nicht vorhaben, sie zu ändern.
Dies ist eine Option:
dbContext.Entry(entity).State = EntityState.Detached;
entity
muss ein materialisiertes Objekt eines Typs sein, der Teil Ihrer Modellklassen ist (Person, Kunde, Bestellung usw.). Sie können ein IQueryable <T> nicht direkt an übergeben dbContext.Entry(...)
. Ist das die Frage, die du gemeint hast?
Detached
. Wenn Sie Entitäten aus der Datenbank laden möchten, ohne sie überhaupt an den Kontext anzuhängen (keine Änderungsverfolgung), verwenden Sie AsNoTracking
.
Detached
.
using(ctx){ return ctx....ToList(); }
. In solchen FällenAsNoTracking()
wäre die Verwendung sehr sinnvoll, da ich das unnötige Ausfüllen des Objektkontexts sparen würde. Ich denke, es hätte wahrscheinlich einen Vorteil in Bezug auf Leistung und Speicherverbrauch, insbesondere bei großen Listen, oder?