Maison >développement back-end >C++ >EF Core AsNoTracking() : quand est-ce important pour les mises à jour ?

EF Core AsNoTracking() : quand est-ce important pour les mises à jour ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-09 13:16:42252parcourir

EF Core AsNoTracking(): When Does it Matter for Updates?

.AsNoTracking() dans EF Core : explication détaillée et impact des mises à jour

La méthode .AsNoTracking() dans EF Core est souvent déroutante, surtout pour les débutants. Pour illustrer son rôle, analysons un scénario spécifique et son impact sur les interactions avec les bases de données.

Supposons que les entités du site Web soient stockées dans un contexte par requête. De nombreuses entités restent inchangées et n'ont pas besoin d'être suivies. Cependant, le scénario suivant pose une question difficile :

<code class="language-csharp">context.Set<User>().AsNoTracking()
// 步骤 1) 获取用户
context.Set<User>()
// 步骤 2) 更新用户</code>

Alternativement, nous pouvons supprimer .AsNoTracking() de l'étape 1 :

<code class="language-csharp">context.Set<User>();
// 步骤 1) 获取用户
context.Set<User>()
// 步骤 2) 更新用户</code>

Dans les deux cas, le contexte est utilisé pour la récupération (étape 1) et la mise à jour (étape 2), mais elles se produisent à des moments différents. La question est : est-ce que cela fait une différence ?

La réponse réside dans la nature du suivi. Dans le premier scénario, l'étape 1 utilise .AsNoTracking(), l'utilisateur récupéré ne sera pas suivi par le contexte. Cela signifie que lors de la mise à jour d'un utilisateur (étape 2), vous devez attacher manuellement l'utilisateur et définir explicitement son statut sur « Modifié ». Cela indique à EF Core de mettre à jour l’utilisateur existant au lieu de créer un nouvel enregistrement.

En revanche, dans le deuxième cas, sans .AsNoTracking(), vous n'avez pas besoin d'effectuer ces étapes manuelles si vous chargez et enregistrez l'utilisateur dans la même instance de contexte. Le mécanisme de suivi gère cela automatiquement, servant les utilisateurs mis à jour sans configuration supplémentaire.

Pour résumer, la différence entre ces deux méthodes est que .AsNoTracking() désactive le suivi des entités récupérées, nécessitant une gestion manuelle de l'état des objets et des pièces jointes lors des mises à jour. Utiliser le même contexte pour la récupération et la mise à jour sans .AsNoTracking() simplifie ce processus, car le mécanisme de suivi gère ces aspects de manière transparente.

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!

Déclaration:
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