我将FirstName,LastName,address,CardID等添加到我的应用程序用户的ASP.net Core MVC应用程序中。
我希望能够添加其他功能来搜索该数据库到UserManager类,以便根据这些附加属性搜索用户。
例如 它已包含按名称(用户名)
查找的功能_userManager.FindByNameAsync("Mike123")
我希望能够通过CARDID找到用户对象
_userManager.FindByCardIDAsync("123456789")
或按地址
的多个用户_userManager.FindByAddressAsync("123 Fake St. Real Town, USA")
我已成功使用此功能
ApplicationUser User = _userManager.Users.FirstOrDefault(u => u.CardID == CardID);
我仍然想了解扩展该类的方法,还是应该创建自己的类并继承它?
答案 0 :(得分:10)
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);
}
}
}
但要注意,这是一个简单的例子,只有在名字/卡片ID /地址是唯一的时候才能正常工作......
我使用SingleOrDefault
作为名称/ CardID /地址不是唯一的情况的保护 - 但我建议再次重新考虑它...我想很难让地址独特所以也许你可以找到更好的标准,或者你会返回一组用户?