Il n'y a pas Detach(object entity)
sur le DbContext
.
Dois-je d'abord détacher des objets sur du code EF?
Il n'y a pas Detach(object entity)
sur le DbContext
.
Dois-je d'abord détacher des objets sur du code EF?
Réponses:
Si vous souhaitez détacher un objet existant, suivez les conseils de @ Slauma. Si vous souhaitez charger des objets sans suivre les modifications, utilisez:
var data = context.MyEntities.AsNoTracking().Where(...).ToList();
Comme mentionné dans le commentaire, cela ne détachera pas complètement les entités. Ils sont toujours attachés et le chargement différé fonctionne mais les entités ne sont pas suivies. Cela doit être utilisé par exemple si vous souhaitez charger une entité uniquement pour lire des données et que vous ne prévoyez pas de les modifier.
Ceci est une option:
dbContext.Entry(entity).State = EntityState.Detached;
entity
doit être un objet matérialisé d'un type qui fait partie de vos classes de modèle (Personne, Client, Commande, etc.). Vous ne pouvez pas passer directement un IQueryable <T> dans dbContext.Entry(...)
. Est-ce la question que vous vouliez dire?
Detached
. Si vous souhaitez charger des entités à partir de la base de données sans les attacher du tout au contexte (pas de suivi des modifications), utilisez AsNoTracking
.
Detached
.
using(ctx){ return ctx....ToList(); }
. Dans de tels cas, l'utilisationAsNoTracking()
aurait beaucoup de sens car j'économiserais de remplir le contexte de l'objet inutilement. Je suppose que cela aurait probablement un avantage en termes de performances et de consommation de mémoire, en particulier pour les grandes listes, non?