自定义函数从用户表中检索数据

时间:2015-09-13 05:58:00

标签: asp.net-mvc-5 asp.net-identity user-management

我想编写一个自定义函数来从身份用户模型中查找特定属性。 假设我想找到具有指定电话号码的用户。 怎么做.. ???

1 个答案:

答案 0 :(得分:1)

您需要扩展UserStore类,如下所示

public interface IUserCustomStore<TUser> : IUserStore<TUser, string>, IDisposable where TUser : class, Microsoft.AspNet.Identity.IUser<string>
{
    Task<TUser> FindByPhoneNumberAsync(string phoneNumber);
}

namespace AspNet.Identity.MyCustomStore  
{
    public class UserStore<TUser> : Microsoft.AspNet.Identity.EntityFramework.UserStore<TUser>, IUserCustomStore<TUser>
        where TUser : Microsoft.AspNet.Identity.EntityFramework.IdentityUser
    {
        public UserStore(ApplicationDbContext context)
            : base(context)
        {
        }

        public Task<TUser> FindByPhoneNumberAsync(string phoneNumber)
        {
            //Your Implementation
        }
    }

    public class UserStore<TUser> : IUserCustomStore<TUser> where TUser:IdentityUser
    {
        public virtual Task<TUser> FindByPhoneNumberAsync(string phoneNumber)
        {         
            return _Users.Find(u => u.PhoneNumber == phoneNumber).FirstOrDefaultAsync();
        }   
    }
}

替换所有出现的

using Microsoft.AspNet.Identity.EntityFramework 

using AspNet.Identity.MyCustomStore  

然后在IdentityConfig.cs中向ApplicationUserManager添加一个新方法

public class ApplicationUserManager : UserManager<ApplicationUser>
{
    public ApplicationUserManager(IUserStore<ApplicationUser> store)
        : base(store)
    {
    }

    //LEAVE ALL THE METHODS AS IT IS

    public virtual Task<ApplicationUser> FindByPhoneNumberUserManagerAsync(string phoneNumber)
    {
        IUserCustomStore<ApplicationUser> userCustomStore = this.Store as IUserCustomStore<ApplicationUser>;
        if (phoneNumber == null)
        {
            throw new ArgumentNullException("phoneNumber");
        }
        return userCustomStore.FindByPhoneNumberAsync(phoneNumber);
    }

}

您现在可以在控制器中调用它,如

var user = await UserManager.FindByPhoneNumberUserManagerAsync(model.phoneNumber);          

(假设您已将phoneNumber属性添加到R​​egisterViewModel)

希望这有帮助。