2017-02-07 18 views
0

他のdbcontextを作成せずに、オーバーライドメソッド内でカスタムテーブルにアクセスできるようにUserStore/UserManagerを拡張することはできますか?Asp.Net Identity - カスタムデータベースアクセスUserManager

私はアイデンティティと統合された従来のデータベースに取り組んでいます。最近では、Usersテーブルと1対1の関係を持つ新しいテーブルClientsをデータベースに追加しました。何がしたいのは、UserManagerクラスのFindAsyncメソッドをオーバーライドして基本メソッドを呼び出し、ユーザーを取得し、テーブルに格納されているユーザーのクライアントIDに基づいて、クライアント名をフェッチしてユーザーモデルに挿入することです。

以下は私が試みたものです。しかし、私にはこれは間違ったアプローチであり、私がしようとしていることを正しく適用する方法についてのいくつかの提案が欲しいと思います。

public override async Task<ApplicationUser> FindAsync(string userName, string password) 
{ 
    ApplicationUser user = await base.FindAsync(userName, password); 

    if (user != null && user.ClientID != null) 
    { 
     using (var ctx = new ApplicationDbContext(HostPage.ConnectionString)) 
     { 
      user.Client = ctx.Clients.Where(p => p.ClientID == user.ClientID).FirstOrDefault(); 
     } 
    } 

    return user; 
} 

答えて

0

あなたはは、このように単一のクエリを実行してテーブルにを結合を実行するためにbase.FindAsync()でSQLを変更することができます。

+0

基本クラスはMicrosfot.AspNet.Identity名前空間の一部であり、変更できません。 どうすればいいですか? – InvaderZim

+0

その場合は、 'base.FindAsync()'の呼び出しをバイパスして実装することができます。さもなければあなたの解決はちょうど良いです。 – Sherlock

+0

Gotchaので、魔法の方法はありませんが、カスタムストアを使用して自分自身でデータベース呼び出しを実装するにはどうしたらいいですか? – InvaderZim

関連する問題