Cannot create a DbSet for ‘IdentityUserRole<string>‘ because this type is not included in the

90 篇文章 0 订阅

困扰许久的问题

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()


看起来似乎可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值