La excepción “Contexto no se puede usar mientras se está creando el modelo” con ASP.NET Identity

¿Por qué ocurre esto cuando hacemos una llamada al método AccountApiController.Register ()?

  • ¿Qué está tratando de usar el contexto?
  • ¿Qué está tratando de crear el contexto?
  • ¿Cómo evitamos esto?
  • ¿cómo depuramos esto?

“Mensaje”: “Ha ocurrido un error”.

“ExceptionMessage”: “El contexto no se puede usar mientras se está creando el modelo. Esta excepción se puede lanzar si el contexto se usa dentro del método OnModelCreating o si varios subprocesos acceden a la misma instancia de contexto. Tenga en cuenta que los miembros de la instancia de DbContext y las clases relacionadas no se garantiza que sean seguras para hilos. “,

“ExceptionType”: “System.InvalidOperationException”,

“StackTrace”: ”

en System.Web.Http.ApiController.d__1.MoveNext ()

— El final del seguimiento de la stack desde la ubicación anterior donde se lanzó la excepción

en System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Tarea Tarea)

en System.Runtime.CompilerServices.TaskAwaiter .HandleNonSuccessAndDebuggerNotification (Task> task)

en System.Web.Http.Dispatcher.HttpControllerDispatcher.d__0.MoveNext () ”

El problema era que NO estábamos usando el patrón de fábrica que MS recomienda .

Puede usar la implementación Factory para obtener una instancia de UserManager del contexto OWIN. … Esta es una forma recomendada de obtener una instancia de UserManager por solicitud para la aplicación.

Como resultado, “múltiples subprocesos acceden simultáneamente a la misma instancia de contexto” porque varias solicitudes y, por lo tanto, subprocesos compartían un DbContext.

Esta siguiente es correcta. Crea una nueva instancia de MyDbContext para cada llamada a la función UserManagerFactory.

UserManagerFactory = () => new UserManager(new UserStore(new MyDbContext())); 

Lo siguiente es incorrecto Se ve similar, pero no crea una nueva instancia para cada llamada a UserManagerFactory. Es lo que estábamos usando, ergo nuestro sitio se rompió.

 var userStore = new UserStore(new MyDbContext()); var userManager = new UserManager(userStore); UserManagerFactory = () => userManager; 

Este error también puede ocurrir en caso de connectionString incorrecto. Compruebe si connectionString es válido (sin errores tipográficos, etc.).

¿Anulas el método OnModelCreating? Si es así, ¿puedes compartirlo o la clase de contexto completa?

Si no, debe prestar atención a lo siguiente en el mensaje de error

o si varios subprocesos acceden simultáneamente a la misma instancia de contexto. Tenga en cuenta que no se garantiza que los miembros de instancia de DbContext y las clases relacionadas sean seguros para la ejecución de subprocesos.

Si eso no ayuda, ¿utiliza un proyecto de API web sin modificar que es creado por Visual Studio?

Si obtiene registros de Table / View, asegúrese de tener suficiente acceso a los objetos DB.

Tuve el mismo problema y lo resolví ejecutándolo

 sp_change_users_login [ @Action = ] 'action' [ , [ @UserNamePattern = ] 'user' ] [ , [ @LoginName = ] 'login' ] [ , [ @Password = ] 'password' ] [;] sp_change_users_login 'update_one' 'dbuser' 'dblogin' 

Encuentre más fragmentos y detalles

Estoy utilizando EF Code First en una architecture de varias capas con MySQL y tuve la misma excepción y el uso de la siguiente línea dentro de las obras de constructura de la clase DBContext:

 Database.SetInitializer(null);