2017-12-18 11 views
0

C 타입 변환에 대한 도움을 찾고 있습니다. MVC 및 Entity Framework 코어를 사용하여 응용 프로그램을 만들고 있습니다. 지금은 ID를 구현하고 있지만 비동기 메서드를 만들 때 "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() 

"RepoUser"(기본적으로 여기에 첫 번째 줄)를 입력하자마자 위에서 설명한 오류 메시지가 나타납니다.

미리 감사드립니다.

+0

FindByEmailAsync가 실제로 비동기 메서드라고 가정하면 작업을 반환 할 가능성이 높습니다. 즉, 사용자는 RepoUser가 아닌 Task입니다. 따라서 사용자 (작업)를 새 RepoUser로 설정하려고하면 암시 적 변환이없는 유형 불일치가 발생합니다. – Kevin

답변

2

변경

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

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

FindByEmailAsync의 말에 Async

에 그것은 아마 Task<RepoUser>를 반환 함을 나타냅니다. 물론 내 말을 듣지 마라. 그것이 무엇을 반환하는지 보라.

메서드를 호출하면 작업이 반환됩니다. 비동기 값을 기다리면 작업과 함께 반환 된 값이 반환됩니다.

+0

그가 문제가되는 줄은 여전히 ​​문제가됩니다. 그는 여전히 사용자 = 새 RepoUser()를 설정할 수 없습니다. – Kevin

+0

'FindByEmailAsync'에 의해 반환되는 타입에'RepoUser'가 할당 가능하다면 문제가 없습니다. –

+0

@Kevin'FindByEmailAsync'는 RepoUser가 아마 ID 사용자를 반환해야합니다. FindByEmailAsync는 일반적인'UserManager '의 일부이며, 사용자 정의 구현이 부족합니다. – NSGaga