最近一个项目需要在API里面集成身份验证,所以选择了Microsoft.AspNet.Identity.Core,以及Microsoft.AspNet.Identity.Owin来实现,但是在实现过程中发现了需要引入Microsoft.AspNet.Identity.Entity ...
最近一个项目需要在API里面集成身份验证,所以选择了Microsoft.AspNet.Identity.Core,以及Microsoft.AspNet.Identity.Oget='_blank'>win来实现,但是在实现过程中发现了需要引入Microsoft.AspNet.Identity.EntityFramework ,导致在代码内出现了多个EF的上下文,虽然网上到处有改名的方式,但是对于强迫症患者,一个工程里多个上下文始终不能接受。果断查看有无方案解决
通过获取源码发现,Microsoft.AspNet.Identity.EntityFramework只是封装了EF,完全可以自己来做,下面简单说明下实现思路。
本文是基于web api5.2+unity+ef来实现
1.通过源码可以查看的继承体系
可以看到其核心是Core中的UserManager来操作,并且Microsoft.AspNet.Identity.EntityFramework封装了EF的上下文和操作的模型。
2.按照需要自定义模型
Microsoft.AspNet.Identity.EntityFramework IdentityRole -> RoleInfo :IRole 只需要继承IRole即可,默认的左联按需取舍
IdentityUser -> UserInfo : IUser
自定义 UserRoleInfo,UserClaimInfo,AccountLoginInfo
3.把新的模型添加到自己的EF上下文
通过codefirst在Map里自定义表名字段类型等,想怎么做怎么做。
4.添加身份操作的Store替换Microsoft.AspNet.Identity.EntityFramework里的UserStore和RoleStore
定义一个新的接口,方便注入
/// <summary> /// 身份验证Store接口 /// </summary> public interface ICustomerIdentityStore : IUserLoginStore<UserInfo, string>, IUserClaimStore<UserInfo, string>, IUserRoleStore<UserInfo, string>, IUserPasswordStore<UserInfo, string>, IUserSecurityStampStore<UserInfo, string>, IQueryableUserStore<UserInfo, string>, IUserEmailStore<UserInfo, string>, IUserPhoneNumberStore<UserInfo, string>, IUserTwoFactorStore<UserInfo, string>, IUserLockoutStore<UserInfo, string>, IUserStore<UserInfo> { }
原标题:还在为身份验证引入的Microsoft.AspNet.Identity.EntityFramework导致多上下文,生成的DB改名困扰吗?
关键词:ASP
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。