是否可以在不使用实体框架的情况下使用新的ASP.NET标识,而是使用您自己的方法?
我有一个MVC项目,它使用纯ADO.NET进行数据访问。我想实现ASP.NET标识,但我想继续使用ADO.NET和存储过程。这就是我选择的路。
我使用的是Asp.Net Identity 2.2.1。我实现这一点的方式是创建我自己的用户:
public class MyUser : IUser {...}
然后创建我自己的UserStore:(实现您实现的接口所需的所有方法,并在这些方法上使用您的数据访问来拉/插入数据。例如,我创建了另一个dal类,在该类上我使用dapper访问数据库,我在用户存储中提供了一个方法的示例,但您实现的所有其他方法都是相同的想法)
public class MyUserStore : IUserStore<MyUser>, IUserPasswordStore<MyUser>, IUserLockoutStore<MyUser, string>, IUserEmailStore<MyUser>
{
public Task<MyUser> FindByNameAsync(string userName)
{
MyUser muser = dal.FindByUsername(userName);
if (muser != null)
return Task.FromResult<User>(muser);
return Task.FromResult<MyUser>(null);
}
//... all other methods
}
然后我的dal.cs上的方法看起来像这样:
public MyUser FindByUsername(string username)
{
//pull user from the database however you want to based on the username,
//in my case here is where I used Dapper to query the db and return the User object with the data on it, but you can do it however you want.
return myUser; //object with data on it
}
然后在我的UserManager上,我将用户存储设置为这样:
public UserManager() : base(new MyUserStore())
{
//anything else you need on the constructor
}
注意:并非MyUserStore上的所有方法都需要访问数据库,因为其中许多方法调用FindUser。。。方法或UpdateUser方法。例如:
public Task<int> IncrementAccessFailedCountAsync(MyUser user)
{
//here I just updated the user object as I know that UpdateAsync() method will be called later.
return Task.FromResult<int>(++user.FailedAttempts);
}
我对自己有类似的要求,并且实现了ASP.NET Identity框架的纯SQL Server版本。
我首先创建了一个示例项目(使用实体框架),然后观察它创建的表。然后,我将这些移植到Visual Studio Sql项目中。
接下来,我使用这个链接来提供关于哪些方法需要实现以及哪些方法与数据库交互的指导(注意:并非商店中的所有方法都应该实现)。链接上的代码是MySQL的,但让我很好地理解了实现什么等等。
我仍然有我使用Sql为ASP.Net标识框架编写的代码。因此,如果我周末有时间,我会看看一个状态有多好,并可能将其上传到github并在这里更新链接。
但同时,使用链接-它也提供了良好的学习体验!