2017-12-18 22 views
0

C言語での型変換に関していくつかの助けを探してください。 MVCとEntity Frameworkコアを使用してアプリケーションを作成しています。現時点ではIDを実装していますが、非同期メソッドを作成しているときに、「タイプ 'GymBuddy.Data.Entities.RepoUser」を「System.Threading.Task.Task」に暗黙的に変換できません。 私はいくつかの記事を読んでいます型変換についてはまだ分かりませんが、この問題についてはまだ分かりませんが、必ずしも答えを探しているわけではありません。単純なプロパティ。暗黙の型変換 - mvcアプリケーション

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ではないタスクであることを意味します。したがって、ユーザー(タスク)を新しいRepoUserに設定しようとすると、暗黙の変換がないタイプの不一致が発生しています。 – Kevin

答えて

2

変更

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

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

Async FindByEmailAsyncの終わりに、それはおそらく Task<RepoUser>を返すことを示しています。それについて私の言葉を取ってはいけません、もちろん、それが何を返すかを見てください。

メソッドを呼び出すと、タスクが返されます。非同期の値を待つと、タスクで返される値が返されます。

+0

問題がある行はまだ問題になります。彼はまだuser = new RepoUser()を設定することはできません。 – Kevin

+0

'RepoUser'が' FindByEmailAsync'によって返されたどんな型にも割り当て可能であれば問題ありません。 –

+0

@Kevin 'FindByEmailAsync'は、RepoUserであると思われるIDユーザーを返すべきです。 FindByEmailAsyncは、一般的な 'UserManager 'の一部であり、カスタム実装の一部ではありません。 – NSGaga