2017-12-18 293 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