Non c'è Detach(object entity)
sul DbContext
.
Ho la possibilità di staccare prima gli oggetti sul codice EF?
Non c'è Detach(object entity)
sul DbContext
.
Ho la possibilità di staccare prima gli oggetti sul codice EF?
Risposte:
Se vuoi staccare un oggetto esistente, segui i consigli di @ Slauma. Se si desidera caricare oggetti senza tenere traccia delle modifiche, utilizzare:
var data = context.MyEntities.AsNoTracking().Where(...).ToList();
Come menzionato nel commento, questo non distaccerà completamente le entità. Sono ancora collegati e il caricamento lento funziona ma le entità non vengono monitorate. Questo dovrebbe essere usato per esempio se vuoi caricare un'entità solo per leggere i dati e non prevedi di modificarli.
Questa è un'opzione:
dbContext.Entry(entity).State = EntityState.Detached;
entity
devo essere un oggetto materializzato di un tipo che fa parte delle classi del tuo modello (Persona, Cliente, Ordine, ecc.). Non è possibile passare direttamente in un IQueryable <T> in dbContext.Entry(...)
. È questa la domanda che intendevi?
Detached
. Se si desidera caricare entità dal DB senza collegarle affatto al contesto (nessun rilevamento delle modifiche), utilizzare AsNoTracking
.
Detached
.
using(ctx){ return ctx....ToList(); }
. In questi casi l'usoAsNoTracking()
avrebbe molto senso perché risparmierei di riempire inutilmente il contesto dell'oggetto. Immagino che probabilmente avrebbe un vantaggio in termini di prestazioni e consumo di memoria soprattutto per elenchi di grandi dimensioni, giusto?