2017-12-18 292 views
0

請在C sharp中尋求一些關於類型轉換的幫助。我正在使用MVC和Entity Framework核心創建一個應用程序。現在我正在實現身份驗證,但是當我創建異步方法時,出現錯誤「無法隱式地將類型'GymBuddy.Data.Entities.RepoUser'轉換爲'System.Threading.Task.Task'。 我已閱讀了一些文章關於類型轉換,但我仍然不清楚這個問題。不一定尋找答案,但也許一些方向如何進一步探索這個問題。在此先感謝。隱式轉換 - mvc應用程序

首先,我創建了RepoUser類與幾個簡單屬性。

using Microsoft.AspNetCore.Identity; 
namespace GymBuddy.Data.Entities 
{ 
public class RepoUser : IdentityUser 
    { 
    public string FirstName { get; set; } 
    public string SecondName { get; set; } 
    } 
} 

其次,我創建了一個類,將在未來的種子數據庫,但也將檢查用戶是否存在。

using GymBuddy.Data.Entities; 
using Microsoft.AspNetCore.Identity; 
using System.Threading.Tasks; 

namespace GymBuddy.Data 
{ 
public class GymBuddySeeder 
{ 
    private readonly UserManager<RepoUser> _userManager; 
    public GymBuddySeeder(UserManager<RepoUser> userManager) 
    { 
     _userManager = userManager; 
    } 
    public async Task Seed() 
    { 
     var user = _userManager.FindByEmailAsync("[email protected]"); 
     if (user == null) 
     { 
      user = new RepoUser() 

一旦I型「RepoUser」(在這裏基本上與第一行)上述錯誤信息彈出。

在此先感謝。

+0

假設FindByEmailAsync實際上是一個異步方法,它可能會返回一個Task。這意味着用戶是一個任務而不是回購用戶。因此,當您嘗試將用戶(任務)設置爲新的RepoUser時,您會遇到不存在隱式轉換的類型不匹配。 – Kevin

回答

2

變化

var user = _userManager.FindByEmailAsync("[email protected]"); 

var user = await _userManager.FindByEmailAsync("[email protected]"); 

AsyncFindByEmailAsync結束表明,它可能返回Task<RepoUser>。不要拿我的話說,當然,看看它的回報。

調用方法返回任務。等待異步值返回任務返回的值。

+0

他遇到問題的路線仍然是問題。他仍然無法設置user = new RepoUser()。 – Kevin

+0

如果*'RepoUser'可分配給'FindByEmailAsync'返回的任何類型,它將不會成爲問題。 –

+0

@Kevin'FindByEmailAsync'應該返回RepoUser可能的身份用戶。 FindByEmailAsync是通用'UserManager '的一部分 - 並且缺少一些應該實現的自定義實現。 – NSGaga