2017-06-04 11 views
7

最後の数日間、私はアイデンティティシステムとエンティティフレームワークコアの組み合わせで戦ってきました。ここではいくつかの情報は、私の問題を明らかにする前にです:アイデンティティとコアの使用

    遅延ロードをサポートしていません
  1. エンティティフレームワークのコアは、これは私がどの項目を言うために
  2. を含めるためにどの項目を言って積極的なロードを使用していることを意味し

    services.AddIdentity<ApplicationUser, ApplicationRole>(options => 
    { 
        options.Cookies.ApplicationCookie.AutomaticChallenge = false; 
    }) .AddUserManager<UserManager>() 
        .AddRoleManager<RoleManager>() 
        .AddUserStore<UserStore>() 
        .AddRoleStore<RoleStore>() 
        .AddEntityFrameworkStores<ApplicationDbContext, int>() 
        .AddDefaultTokenProviders(); 
    
:私は、各リポジトリ内のメソッドをオーバーライド取得したいオブジェクト(検索プロパティが今の定数である)
  • は、私が使用しているアイデンティティシステムは、以下のように構成されていますさて、問題自体への

    を、私は、トークンを生成するために、アイデンティティシステムを使用したいユーザーなどを取得するが、それは方法がTask<ApplicationUser>を返すだと私はUserManagerオブジェクト自体に熱心なロードを行うことができないと考えInclude()メソッド自体にはIQueryableが必要です(熱心に読み込むには)。熱心な負荷と、UserManagerを使用できる一般的な方法は何ですか?

  • +0

    https://github.com/aspnet/Identity/issues/1082#issuecomment-273514725で問題を追跡できます。私はそれがあなたの問題を解決するのに良いと思う。 –

    答えて

    2

    最も簡単な方法は、UserManger.Usersを直接呼び出すことです。このように:

    ApplicationUser user = await userManager.Users.Include(s => s.Sales).Where(e => e.Email == "[email protected]").FirstOrDefaultAsync(); 
    
    0

    はたぶん、あなたは次のように熱心なロードとのUserManagerを使用したい:

    private async Task<ApplicationUser> GetSingleUser(Expression<Func<ApplicationUser, bool>> 
         predicate, params Expression<Func<ApplicationUser, object>>[] includeProperties) 
        { 
         IQueryable<ApplicationUser> query = _userManager.Users; 
         foreach (var includeProperty in includeProperties) 
         { 
          query = query.Include(includeProperty); 
         } 
    
         return await query.Where(predicate).FirstOrDefaultAsync(); 
        } 
    

    ・ホープこのヘルプ!

    関連する問題