2017-06-25 8 views
1

ASP.netコアMVCアプリケーションのアプリケーションユーザーに名字、姓、住所、CardIDなどを追加しました。カスタムフィールドによる検索を含めるようにUserManagerを拡張するASP.netコア

これらの追加プロパティに基づいてユーザーを検索するために、そのデータベースを検索するための追加機能をUserManagerクラスに追加したいと考えています。私は

_userManager.FindByCardIDAsync("123456789") 

または複数のユーザーアドレス

によってCARDIDでユーザーオブジェクトを見つけるための能力をしたいと思い

_userManager.FindByNameAsync("Mike123") 

は、例えば それはすでに名前で検索するための機能が含まれています(ユーザー名)

_userManager.FindByAddressAsync("123 Fake St. Real Town, USA") 

私は正常にこの機能を使用しました

ApplicationUser User = _userManager.Users.FirstOrDefault(u => u.CardID == CardID); 

私はまだそのクラスを拡張する方法を理解したいと思いますが、自分で作成して継承する必要がありますか?

+1

あなたのデザインに依存しています - 「CardID」が一意でない場合、そのコンテキストで「FirstOrDefault」を使用すると問題が発生する可能性がありますのでご注意ください。複数のユーザーが同じCardID/Addressを持つ場合、ランダムユーザーを取得したくないのですか? –

+0

CardIDはユーザーに固有です –

答えて

5

Extension Methodsについてたとえば:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using ExampleProject.Models; 
using Microsoft.AspNetCore.Identity; 

namespace ExampleProject 
{ 
    public static class UserManagerExtensions 
    { 
     public static ApplicationUser FindByNameAsync(this UserManager<ApplicationUser> um, string name) 
     { 
      return um?.Users?.SingleOrDefault(x => x.UserName == name); 
     } 

     public static ApplicationUser FindByCardIDAsync(this UserManager<ApplicationUser> um, string cardId) 
     { 
      return um?.Users?.SingleOrDefault(x => x.CardID == cardId); 
     } 

     public static ApplicationUser FindByAddressAsync(this UserManager<ApplicationUser> um, string address) 
     { 
      return um?.Users?.SingleOrDefault(x => x.Address == address); 
     } 
    } 
} 

しかし、注意してください、それは

は、私が名前の場合の保護としてSingleOrDefaultを使用していた...簡単な例で、名前/ CARDID /アドレスが一意である場合にのみ、うまく動作します/ CardID/Addressはユニークではありませんが、もう一度考え直すことをお勧めします。住所をユニークにすることは難しいでしょうか?おそらく、あなたはより良い基準を見つけることができます。

関連する問題