web-dev-qa-db-fra.com

Exception "Le contexte ne peut pas être utilisé pendant la création du modèle" avec une identité ASP.NET

Pourquoi cela se produit-il lorsque nous appelons la méthode AccountApiController.Register ()?

  • qu'est-ce qui essaie d'utiliser le contexte? 
  • qu'est-ce qui essaie de créer le contexte? 
  • comment pouvons-nous éviter cela? 
  • comment pouvons-nous déboguer ceci? 

"Message": "Une erreur est survenue",

"ExceptionMessage": "Le contexte ne peut pas être utilisé tant que le modèle est créé. Cette exception peut être levée si le contexte est utilisé À l'intérieur de la méthode OnModelCreating ou si la même instance de contexte est Accessible par plusieurs Notez que les membres d'instance de DbContext et les classes associées ne sont pas garantis d'être thread safe. ",

"ExceptionType": "System.InvalidOperationException",

"Trace de la pile":" 

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

--- Trace de fin de pile depuis l'emplacement précédent où une exception a été levée

à System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (tâche)

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

sur System.Web.Http.Dispatcher.HttpControllerDispatcher.d__0.MoveNext () "

39
Shaun Luttin

Le problème était que nous n’utilisions PAS le modèle d’usine recommandé par MS recommande .

Vous pouvez utiliser l'implémentation Factory pour obtenir une instance de UserManager du contexte OWIN. ... Ceci est une méthode recommandée pour obtenir une instance de UserManager par demande pour l'application.

En conséquence, "plusieurs threads accèdent simultanément à la même instance de contexte", car plusieurs requêtes, et donc des threads, ont partagé un DbContext.

Ce qui suit est correct. Il crée une nouvelle instance de MyDbContext pour chaque appel de la fonction UserManagerFactory.

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

Ce qui suit est incorrect. Il semble similaire mais ne crée pas de nouvelle instance pour chaque appel à UserManagerFactory. C'est ce que nous utilisions, car notre site a éclaté.

var userStore = new UserStore<IdentityUser>(new MyDbContext());                    
var userManager = new UserManager<IdentityUser>(userStore);
UserManagerFactory = () => userManager;
23
Shaun Luttin

Cette erreur peut également se produire en cas de connectionString incorrect. Vérifiez si connectionString est valide (pas de faute de frappe, etc.). 

24
Rafal Cypcer

Remplacez-vous la méthode OnModelCreating? Si oui, pouvez-vous la partager ou la classe de contexte entière?

Sinon, faites attention aux points suivants dans le message d'erreur 

ou si plusieurs threads ont accès simultanément à la même instance de contexte. Notez que les membres d'instance de DbContext et les classes associées ne sont pas garantis d'être thread-safe.

Si cela ne vous aide pas, utilisez-vous un projet d'API Web non modifié créé par Visual Studio?

1
Horizon_Net

Si vous obtenez des enregistrements de Table/View, assurez-vous de disposer d'un accès suffisant aux objets de la base de données.

J'ai eu le même problème et je l'ai résolu en exécutant 

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


sp_change_users_login 'update_one' 'dbuser' 'dblogin'

Trouvez plus d'extrait et de détails

0
Raj kumar

J'utilise EF Code First dans une architecture multicouche avec MySQL. J'avais la même exception. J'utilise la ligne suivante dans la structure DBContext Class:

Database.SetInitializer<EntitiesName>(null);
0
Pedro C