Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 27156|Répondre: 2

[Source] EF DbContext garantit que le contexte est unique

[Copié le lien]
Publié sur 22/08/2020 10:21:31 | | |
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) :





Précédent:ASP.NET MVC5 est publié en mode précompilé, améliorant la vitesse de chargement des pages et les performances
Prochain:[Tourne]. NET exporte PPT sous forme d’image
Publié sur 25/08/2020 23:38:22 |
N’est-ce pas parfumé par infusion ?
 Propriétaire| Publié sur 26/08/2020 21:37:39 |
Cucumber Publié le 25-08-2020 à 23:38
N’est-ce pas parfumé par infusion ?

Le cycle de vie par défaut de asp.net Core ne répond pas à mes besoins

Les instances de service créées par l’objet Singleton : IServiceProvider sont stockées sur l’objet IServiceProvider en tant que conteneur racine, donc plusieurs objets IServiceProvider avec la même racine pour le même type d’instances de service sont tous sur le même objet.
Les instances de service créées par l’objet Scoped :IServiceProvider sont sauvegardées seules, de sorte que les instances de service du même type fournies par le même objet IServiceProvider sont toutes le même objet.
Transitoire : Pour chaque requête de fourniture de service, l’objet IServiceProvider crée toujours une nouvelle instance de service.
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com