2017-12-30 21 views
0

speichert Ich habe ein .NET-Core-2-MVC-Projekt mit ASPnet Identität einrichten bekommt, eine ApplicationUser mit:Identität Usermanager UpdateAsync kein benutzerdefinierten Felder Datenbank

public class ApplicationUser : IdentityUser 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

In dieser Aktion, die ich den First bekommen und Name aus einem Formular und wollen sie in die Datenbank speichern:

private readonly UserManager<ApplicationUser> _userManager; 

... 

var user = _userManager.GetUserAsync(User).Result; 
user.FirstName = model.FirstName; 
user.LastName = model.LastName; 

var result = _userManager.UpdateAsync(user).Result; 

Alles funktioniert (Passwort zu aktualisieren, das Passwort zurückzusetzen, usw.) mit Ausnahme _userManager.UpdateAsync(user) mit den benutzerdefinierten Feldern zu speichern. Das zurückgegebene result.Succeeded ist immer wahr, aber die Änderungen werden nicht in der Datenbank gespeichert.

Was mache ich hier falsch?

Edit: die Debug-Konsole gibt das folgende Update-Abfrage für UpdateAsync, die die benutzerdefinierten Felder fehlt:

UPDATE [AspNetUsers] SET [AccessFailedCount] = @p0, [ConcurrencyStamp] = @p1, [Email] = @p2, [EmailConfirmed] = @p3, [FirstName] = @p4, [LastName] = @p5, [LockoutEnabled] = @p6, [LockoutEnd] = @p7, [NormalizedEmail] = @p8, [NormalizedUserName] = @p9, [PasswordHash] = @p10, [PhoneNumber] = @p11, [PhoneNumberConfirmed] = @p12, [SecurityStamp] = @p13, [TwoFactorEnabled] = @p14, [UserName] = @p15

+0

haben Sie nach dem Hinzufügen der benutzerdefinierten Eigenschaften eine Migration generiert –

+0

Ja, ich tat. Doppel überprüft und die Spalten existieren in der DB – MysticEarth

+1

Sie könnten versuchen, warten auf die GetUserAsync – sheavens

Antwort

0

Der Vollständigkeit halber werde ich meinen Kommentar als Antwort posten. Die GetUserAsync-Funktion wird weiterhin ausgeführt, wenn Sie den Vornamen und den Nachnamen festlegen. Wenn Sie die GetUserAsync-Methode auf "Warten" warten, muss der Code warten, bis die Async-Funktion abgeschlossen ist, bevor Sie fortfahren.

+0

OP ruft '.Result' an, das auf das Ergebnis warten wird (aber es wird ein blockierender Aufruf sein und kann sogar zu Deadlocks führen, keine gute Übung, aber unwahrscheinlich, dass das Problem hier auftritt) – Tseng

Verwandte Themen