Maison > développement back-end > C++ > Le « .AsNoTracking() » d'EF Core affecte-t-il les écritures de la base de données lors de la mise à jour des entités ?

Le « .AsNoTracking() » d'EF Core affecte-t-il les écritures de la base de données lors de la mise à jour des entités ?

Susan Sarandon
Libérer: 2025-01-09 13:11:40
original
164 Les gens l'ont consulté

Does EF Core's `.AsNoTracking()` Affect Database Writes When Updating Entities?

EF Core .AsNoTracking() et écritures de base de données : une clarification

Entity Framework Core (EF Core) propose .AsNoTracking() d'optimiser les requêtes en désactivant le suivi des modifications. Ceci est avantageux lorsque vous avez uniquement besoin de lire des données et que vous n'avez pas l'intention de les modifier dans le contexte actuel. Cependant, son impact sur les mises à jour ultérieures nécessite un examen attentif.

Votre exemple met en évidence un point de confusion courant :

Scénario : À l'aide d'un contexte par requête, vous récupérez d'abord un utilisateur avec .AsNoTracking(), puis tentez de mettre à jour le même utilisateur.

Étape 1 : context.Set<user>().AsNoTracking() récupère un utilisateur sans suivi.

Étape 2 : context.Set<user>() tente de mettre à jour l'utilisateur non suivi.

La différence cruciale :

La principale différence entre utiliser .AsNoTracking() et ne pas l'utiliser réside dans la façon dont EF Core gère l'état de l'entité.

  • Sans .AsNoTracking() : EF Core suit l'entité. Lorsque vous mettez à jour et enregistrez, EF Core détecte automatiquement les modifications et met à jour la base de données en conséquence. Il s'agit de l'approche la plus simple et la plus directe si vous avez l'intention de modifier l'entité.

  • Avec .AsNoTracking() : L'entité n'est pas suivie. EF Core ne connaît pas les modifications que vous apportez. Pour mettre à jour la base de données, vous devez explicitement attacher l'entité au contexte en utilisant context.Entry(user).State = EntityState.Modified; avant d'appeler context.SaveChanges(). Dans le cas contraire, un nouvel enregistrement sera probablement inséré au lieu de la mise à jour de celui existant.

En bref, .AsNoTracking() permet des gains de performances pour les opérations en lecture seule. Pour les opérations de mise à jour, évitez .AsNoTracking() pour la récupération initiale ou soyez prêt à gérer manuellement l'état de l'entité dans le contexte avant d'enregistrer les modifications. Le choix dépend de vos besoins spécifiques et si vous privilégiez les performances ou un code plus simple.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal