2017-08-17 201 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