En utilisant EF pour manipuler la base de données, extraire le DbContext (classe de contexte d’opération de base de données) dans la même requête HTTP afin d’assurer l’unicité, l’article utilise deux schémas pour garantir l’unicité du contexte du cadre d’entité, et la solution sur la plateforme .NET Core est attachée.
Option 1
Si un objet est garanti d’être globalement unique, vous penserez certainement à un motif de conception classique : le mode singleton, si l’objet à utiliser doit être unique dans le thread ?
Emplacement de données : CallContext, d’accord, voir l’explication du contenu des appels dans le msdn.
CallContext est un objet de collection dédié, similaire à un magasin local de thread pour les appels de méthode, et fournit un emplacement de données unique à chaque thread d’exécution logique. Les emplacements de données ne sont pas partagés entre les contextes d’appel sur d’autres threads logiques. Des objets peuvent être ajoutés au CallContext lorsqu’il se propage d’avant en arrière le long du chemin du code d’exécution et est inspecté par des objets individuels dans ce chemin.
C’est-à-dire que le thread courant stocke l’objet dans le stockage local du thread, et l’objet est détruit au fur et à mesure que le thread est détruit.
Utilisez le code :
Scénarios d’utilisation : Personnellement, je pense qu’il est utilisé lorsque l’objet doit être utilisé globalement dans le thread, et que les autres threads d’extension de package thread ne peuvent pas y accéder. Par exemple, dans le contexte de données de l’EF, un thread sera généré pour chaque requête, et à ce moment-là, un objet de contexte de données sera créé pour différentes fonctions, puis enfin un commit ensemble pour éviter les problèmes de transaction. Bien sûr, certaines personnes peuvent me demander si je peux créer une variable à utiliser, ce qui peut aussi atteindre le même objectif, bien sûr, mais cet objet peut aussi interagir avec d’autres données de thread, ce qui va à l’encontre du concept d’être unique dans le thread.
Option 2
Le scénario est basé sur des requêtes web http, car chaque requête est un nouveau thread, et le code est le suivant :
Utilisation de « CallContext » dans .NET Core
Nous savons que CallContext n’est plus disponible pour . NETStandard ou .NET Core.
Mais vous pouvez utiliser Asynclocal<T> pour imiter un CallContext, il suffit de créer la classe statique suivante :
Espaces de noms à référencier :
C’est aussi facile à utiliser (ici j’ai mis CallContext dans la bibliothèque Commune) :
|