No hay Detach(object entity)
en el DbContext
.
¿Tengo la capacidad de separar objetos en el código EF primero?
No hay Detach(object entity)
en el DbContext
.
¿Tengo la capacidad de separar objetos en el código EF primero?
Respuestas:
Si desea separar el objeto existente, siga los consejos de @ Slauma. Si desea cargar objetos sin realizar un seguimiento de los cambios, use:
var data = context.MyEntities.AsNoTracking().Where(...).ToList();
Como se mencionó en el comentario, esto no separará completamente las entidades. Todavía están unidos y la carga diferida funciona, pero las entidades no se rastrean. Esto debería usarse, por ejemplo, si desea cargar la entidad solo para leer datos y no planea modificarlos.
Esta es una opción:
dbContext.Entry(entity).State = EntityState.Detached;
entity
debe ser un objeto materializado de un tipo que sea parte de tus clases de modelo (Persona, Cliente, Pedido, etc.). No puede pasar directamente un IQueryable <T> a dbContext.Entry(...)
. ¿Esa es la pregunta que quisiste decir?
Detached
. Si desea cargar entidades de la base de datos sin asociarlas al contexto (sin seguimiento de cambios), use AsNoTracking
.
Detached
.
using(ctx){ return ctx....ToList(); }
. En tales casos, el usoAsNoTracking()
tendría mucho sentido porque ahorraría llenar innecesariamente el contexto del objeto. Supongo que probablemente tendría un rendimiento y un beneficio en el consumo de memoria, especialmente para listas grandes, ¿verdad?