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):
|