Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 27156|Respuesta: 2

[Fuente] EF DbContext garantiza que el contexto es único

[Copiar enlace]
Publicado en 22/8/2020 10:21:31 | | |
Utilizando EF para manipular la base de datos, extraer el DbContext (clase de contexto de operación de base de datos) en la misma solicitud HTTP para asegurar la unicidad, el artículo utiliza dos esquemas para garantizar la unicidad del contexto del Entity Framework, y la solución en la plataforma .NET Core se adjunta.

Opción 1

Si un objeto está garantizado como único globalmente, definitivamente pensarás en un patrón de diseño clásico: modo singleton, si el objeto a usar debe ser único en el hilo.

Ranura de datos: CallContext, vale, consulta la explicación de msdn sobre el contenido de las llamadas.

CallContext es un objeto de colección dedicado similar a un almacén local de hilos para llamadas a métodos, y proporciona un espacio de datos único para cada hilo lógico de ejecución. Los espacios de datos no se comparten entre contextos de llamada en otros hilos lógicos. Los objetos pueden añadirse al CallContext cuando este se propaga de un lado a otro a lo largo del camino del código de ejecución y es inspeccionado por objetos individuales en ese camino.

Es decir, el hilo actual almacena el objeto en el almacenamiento local del hilo, y el objeto se destruye a medida que el hilo se destruye.

Usa código:



Escenarios de uso: Personalmente creo que se usa cuando el objeto necesita usarse globalmente dentro del hilo, y los otros hilos de extensión de paquetes de hilos no pueden acceder a él. Por ejemplo, en el contexto de datos de EF, se genera un hilo para cada petición y, en ese momento, se crea un objeto de contexto de datos para que diferentes funciones lo utilicen, y finalmente se comprometen juntos para evitar problemas de transacciones. Por supuesto, algunas personas pueden preguntarme si puedo crear una variable para usar, que también puede lograr el mismo propósito, claro, pero este objeto también puede interactuar con otros datos del hilo, lo que va en contra del concepto de ser único dentro del hilo.

Opción 2

El escenario se basa en peticiones web http, porque cada solicitud es un hilo nuevo, y el código es el siguiente:



Uso de "CallContext" en .NET Core

Sabemos que CallContext ya no está disponible para . NETStandard o .NET Core.

Pero puedes usar Asynclocal<T> para imitar un CallContext, solo tienes que crear la siguiente clase estática:



Espacios de nombres que necesitan referenciarse:



También es fácil de usar (aquí he puesto CallContext en la biblioteca Común):





Anterior:ASP.NET MVC5 se lanza usando el modo precompilado, mejorando la velocidad de carga y el rendimiento de la página
Próximo:[Gira]. NET exporta PPT como imagen
Publicado en 25/8/2020 23:38:22 |
¿No es fragante con infusión?
 Propietario| Publicado en 26/8/2020 21:37:39 |
Cucumber Publicado el 25-8-2020 23:38
¿No es fragante con infusión?

El ciclo de vida de la inyección por defecto de asp.net core no satisface mis necesidades

Las instancias de servicio creadas por el objeto Singleton: IServiceProvider se almacenan en el objeto IServiceProvider como contenedor raíz, por lo que múltiples objetos IServiceProvider con la misma raíz para el mismo tipo de instancias de servicio están todos en el mismo objeto.
Las instancias de servicio creadas por el objeto Scoped:IServiceProvider se guardan por sí mismas, por lo que las instancias de servicio del mismo tipo proporcionadas por el mismo objeto IServiceProvider son todas el mismo objeto.
Transitorio: Para cada solicitud de provisión de servicio, el objeto IServiceProvider siempre crea una nueva instancia de servicio.
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com