Não há Detach(object entity)
no DbContext
.
Tenho a capacidade de desanexar objetos no código EF primeiro?
Não há Detach(object entity)
no DbContext
.
Tenho a capacidade de desanexar objetos no código EF primeiro?
Respostas:
Se você deseja desanexar o objeto existente, siga as recomendações de @ Slauma. Se você deseja carregar objetos sem acompanhar as alterações, use:
var data = context.MyEntities.AsNoTracking().Where(...).ToList();
Conforme mencionado no comentário, isso não desanexará completamente as entidades. Eles ainda estão anexados e o carregamento lento funciona, mas as entidades não são rastreadas. Isso deve ser usado, por exemplo, se você deseja carregar a entidade apenas para ler dados e não planeja modificá-los.
Esta é uma opção:
dbContext.Entry(entity).State = EntityState.Detached;
entity
deve ser um objeto materializado de um tipo que faça parte de suas classes de modelo (Pessoa, Cliente, Pedido, etc.). Você não pode passar diretamente um IQueryable <T> para dbContext.Entry(...)
. Essa é a pergunta que você quis dizer?
Detached
. Se você deseja carregar entidades do banco de dados sem anexá-las ao contexto (sem rastreamento de alterações), use AsNoTracking
.
Detached
.
using(ctx){ return ctx....ToList(); }
. Nesses casos, o usoAsNoTracking()
faria muito sentido, porque eu economizaria preenchendo o contexto do objeto desnecessariamente. Eu acho que provavelmente teria um benefício de desempenho e consumo de memória, especialmente para listas grandes, certo?