困扰许久的问题
Cannot create a DbSet for 'IdentityUserRole<string>' because this type is not included in the model for the context.
搜索后的结果并不能解决问题,表象相同可能实质各异。
只能一步步调整修改,比较修改前后的差异,最终怀疑是UserStore构造问题;
因为在ApplicationDbContext中添加了User的Department信息,参考了Roles的实现;
所以UserStore是自己客制化的;
原本的UserStore结构如下:
public class UserStore<TUser, TRole, TContext, TKey, TUserClaim, TUserRole, TUserLogin, TUserToken, TRoleClaim> :
UserStoreBase<TUser, TRole, TKey, TUserClaim, TUserRole, TUserLogin, TUserToken, TRoleClaim>,
IProtectedUserStore<TUser>
where TUser : IdentityUser<TKey>
where TRole : IdentityRole<TKey>
where TContext : DbContext
where TKey : IEquatable<TKey>
where TUserClaim : IdentityUserClaim<TKey>, new()
where TUserRole : IdentityUserRole<TKey>, new()
where TUserLogin : IdentityUserLogin<TKey>, new()
where TUserToken : IdentityUserToken<TKey>, new()
where TRoleClaim : IdentityRoleClaim<TKey>, new()
通过继承实现如下
public class UserStoreExt<TUser, TRole, TDepartment, TContext, TKey, TUserClaim, TUserRole, TUserDepartment, TUserLogin, TUserToken, TRoleClaim, TDepartmentClaim> :
UserStore<TUser, TRole, TContext, TKey, IdentityUserClaim<TKey>, IdentityUserRole<TKey>, IdentityUserLogin<TKey>, IdentityUserToken<TKey>, IdentityRoleClaim<TKey>>,
IUserDepartmentStore<TUser>
where TUser : IdentityUser<TKey>
where TRole : IdentityRole<TKey>
where TDepartment : IdentityDepartment<TKey>
where TContext : DbContext
where TKey : IEquatable<TKey>
where TUserClaim : IdentityUserClaim<TKey>, new()
where TUserRole : IdentityUserRole<TKey>, new()
where TUserDepartment : IdentityUserDepartment<TKey>, new()
where TUserLogin : IdentityUserLogin<TKey>, new()
where TUserToken : IdentityUserToken<TKey>, new()
where TRoleClaim : IdentityRoleClaim<TKey>, new()
where TDepartmentClaim : IdentityDepartmentClaim<TKey>, new()
结果发现UserRole无法实现;
后直接改写原来的UserStore,从UserStoreBase继承过来,如下
public class UserStore<TUser, TRole, TDepartment, TContext, TKey, TUserClaim, TUserRole, TUserDepartment, TUserLogin, TUserToken, TRoleClaim, TDepartmentClaim> :
UserStoreBase<TUser, TRole, TKey, TUserClaim, TUserRole, TUserLogin, TUserToken, TRoleClaim>,
IUserDepartmentStore<TUser>,
IProtectedUserStore<TUser>
where TUser : IdentityUser<TKey>
where TRole : IdentityRole<TKey>
where TDepartment : IdentityDepartment<TKey>
where TContext : DbContext
where TKey : IEquatable<TKey>
where TUserClaim : IdentityUserClaim<TKey>, new()
where TUserRole : IdentityUserRole<TKey>, new()
where TUserDepartment : IdentityUserDepartment<TKey>, new()
where TUserLogin : IdentityUserLogin<TKey>, new()
where TUserToken : IdentityUserToken<TKey>, new()
where TRoleClaim : IdentityRoleClaim<TKey>, new()
where TDepartmentClaim : IdentityDepartmentClaim<TKey>, new()
看起来似乎可以了。