2016-05-15 3 views
0

Ich versuche eine variable Anzahl von Benutzern zu erstellen, abhängig von den aktuellen Anforderungen. Dies funktioniert in MVC4 ohne Async. Jetzt, wo MVC6 Async benötigt, erhalte ich Fehler, wenn ich versuche, mehr als 13 Benutzer zu erstellen. Ich bin mit dem Standard RC1 final Account Vorlage:MVC 6 Das Seeding von Benutzern in einer Schleife schlägt immer auf dem 14. Benutzer mit Zugriff auf das Objekt fehl.

 [FromServices] 
     public DecAppContext DecAppContext { get; set; } 

     private readonly UserManager<ApplicationUser> _userManager; 
     private readonly SignInManager<ApplicationUser> _signInManager; 
     private readonly IEmailSender _emailSender; 
     private readonly ISmsSender _smsSender; 
     private readonly ApplicationDbContext _applicationDbContext; 
     private static bool _databaseChecked; 

     public AccountController(
      UserManager<ApplicationUser> userManager, 
      SignInManager<ApplicationUser> signInManager, 
      IEmailSender emailSender, 
      ISmsSender smsSender, 
      ApplicationDbContext applicationDbContext) 
     { 
      _userManager = userManager; 
      _signInManager = signInManager; 
      _emailSender = emailSender; 
      _smsSender = smsSender; 
      _applicationDbContext = applicationDbContext; 
     } ... 

Ich versuche, hier 300 Benutzer zu registrieren:

BatchRegister(300); 
public async void BatchRegister(int users = 0, int n = 1) 
    { 

     Random rnd = new Random(); 
      while (n <= users) 
      { 
       string password = "T3sT*" + rnd.Next(1, 99).ToString(); 
       string usernm = "Test" + n.ToString(); 
       Debug.WriteLine("Going to register user" + usernm); 
       var user = new ApplicationUser { UserName = usernm, Email = usernm + "@noemail.com" }; 
       var result = await _userManager.CreateAsync(user, password); 
       if (result.Succeeded) 
       { 
        Debug.WriteLine("Registered User " + usernm + " " + password); 
       } 
       n++; 
      } 
    } 

Die oben läuft gut für die ersten 13 Benutzer. Sie sind in der Datenbank und ich kann mich mit den Konten einloggen. wenn ich in mehr als 13 Benutzer stürzt das Programm auf var Ergebnis jedoch eingeben = erwarten _userManager.CreateAsync (Benutzer, Passwort) mit dem Fehler:

"Cannot access a disposed object.\r\nObject name: 'UserStore`3'."

Jede Hilfe zu verstehen, warum dies geschieht und eine Lösung wäre, sehr geschätzt. Es ist nicht möglich, diese Zeile für Zeile einzugeben. Für einige Tests muss ich 2000 Benutzer eingeben.

Antwort

0

Ich habe das Problem gefunden. Da ich das Batch-Register in einer anderen Methode ohne das await-Schlüsselwort aufgerufen habe, scheint es, sobald die Ansicht gerendert wurde, dass es nicht mehr funktioniert. Ich habe den Aufruf geändert:

await BatchRegister(300); 

Ich dachte, die await in der BatchRegister Methode würde den Aufruf der Ansicht verhindern, fortzusetzen, bis die BatchRegister Methode durchgeführt wurde. Aber anscheinend nicht. Sie müssen der aufrufenden Methode mitteilen, dass sie wartet, bis sie fertig ist. Mir fehlen offenbar noch einige Konzepte für die asynchrone Programmierung. Ich dachte, der Sinn des Wartens wäre, es so zu machen, dass die Aussicht nicht auf etwas im Hintergrund warten würde. Ich schätze, ich werde diesen Gedanken weiter erforschen.

Verwandte Themen