2017-08-17 156 views
1

我想在我的ASP.Net MVC 5.0应用程序使用下面的函数编程方式将用户添加到AspNetUsers表:UserManager.CreateAsync .Success始终返回false

private async Task AddUser(DataImportMember member) 
{ 
    var user = new ApplicationUser 
    { 
     UserName = member.Email, 
     Email = member.Email, 
     UserType = UserType.IsMember 
    }; 

    var password = RandomPassword.Generate(); 
    var result = await this.UserManager.CreateAsync(user, password); 
    if (result.Succeeded) 
    { 
     await this.UserManager.AddToRoleAsync(user.Id, MyApp.IsMember); 
    } 
} 

但每当我打电话this.UserManager.CreateAsyncresult.Succeed总是假的。我已经检查过AspNetUsers表,并且如预期的那样,用户没有被添加。

任何想法我怎么能找出什么是错的,如何解决呢?

谢谢。

+0

检查结果错误消息,找出为什么保存失败。 – Nkosi

回答

2

UserManager.CreateAsync返回IdentityResult,这也将包含任何错误,为什么行动没有成功。您应该检查结果错误消息以找出操作失败的原因。

var result = await this.UserManager.CreateAsync(user, password); 
if (result.Succeeded) { 
    await this.UserManager.AddToRoleAsync(user.Id, MyApp.IsMember); 
} else { 
    var errors = result.Errors; 
    var message = string.Join(", ", errors); 
    ModelState.Add("", message); 
} 
+0

感谢@Nkosi。感到愚蠢的是,我没有考虑过究竟是什么东西。我只是看着'.Succeed'。无论如何,问题解决了。有2个不同的连接字符串定义,只是清除数据库之一。无论如何全部排序。再次感谢。 – Thierry

0

你可以把try catch来检查实际的错误。

try{ 
     var result = await this.UserManager.CreateAsync(user, password); 
    } 
    catch(exception ex) 
    { 
    through ex; 
    } 

得到确切的错误后,最好删除try catch块。

+0

没有错误发生。 – Thierry