C#学习教程:AspNetCore.Identity不能使用自定义用户/角色来实现共享如下我的DbContext实现publicclassApplicationDbContext:IdentityDbContext{}到目前为止还不错,除了AspNetCore的新DI容器似乎不喜欢我的默认自定义实现。我的Startup.cs文件中的以下代码行抛出如下所示的错误services.AddIdentity().AddEntityFrameworkStores().AddDefaultTokenProviders();GenericArguments[0],'NewCo.DomainModel.Models.Identity.User','Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore`4[TUser,TRole,TContext,TKey]'违反了对类型'TUser'的约束。我假设这是因为默认的Identitygremlin被实现为使用我正在使用的IdentityUser。接下来我该怎么办?(我完全没有想法)注意:我正在构建微软的官方.NETCore和ASP.NETCore版本,截至周一(2016年6月27日)和VisualStudioUpdate3(如果对任何人有帮助的话)因为您使用的是自定义密钥类型,因此在调用AddEntityFrameworkStores时必须指定它:services.AddIdentity().AddEntityFrameworkStores().AddDefaultTokenProviders();我最终得到了这个解决方案:我实际上创建了自己的抽象IdentityDbContext然后你可以传递任何自定义模型,唯一的问题是当创建数据库时,EF为除User和Role之外的所有表添加了一个Disriminator字段(继承)公共抽象类ApplicationDbContext:IdentityDbContext其中TUser:IdentityUser其中TRole:IdentityRole其中TKey:IEquatable其中TUserClaim:IdentityUserClaim其中TUserRole:IdentityUserRole其中TUserLogin:IdentityUserLogin其中TRoleClaim:IdentityRoleClaim其中TUserToken:IdentityUserToken{publicApplicationDbContext(DbContextOptions选项):基础(选项){}protectedApplicationDbContext(){}publicnewDbSetRoleClaims{get;放;}publicnewDbSetRoles{get;放;}publicnewDbSetUserClaims{get;放;}公共新DbSet用户登录{得到;放;}publicnewDbSetUserRoles{get;放;}publicnewDbSetUsers{get;放;}publicnewDbSetUserTokens{get;放;}protectedoverridevoidOnModelCreating(ModelBuilderbuilder){base.OnModelCreating(builder);}}publicclassAppDbContext:ApplicationDbContext{publicAppDbContext(DbContextOptionsoptions):base(options){}//publicnewDbSetUserClaims{get;放;}protectedoverridevoidOnModelCreating(ModelBuilderbuilder){base.OnModelCreating(builder);//自定义ASP.NETIdentity模型并在需要时覆盖默认值。//例如,您可以重命名ASP.NETIdentity表名称等。//在调用base.OnModelCreating(builder)之后添加自定义项;}}services.AddIdentity().AddEntityFrameworkStores().AddDefaultTokenProviders().AddUserStore().AddRoleStore()公共类ApplicationUser:IdentityUser{publicApplicationUser(){//this.Id=Guid.NewGuid();}公共应用程序ser(stringuserName):this(){this.UserName=userName;}publicGuidClientId{得到;放;}//publicnewICollectionClaims{get;放;}}//公共类ApplicationRole:IdentityRole公共类ApplicationRole:IdentityRole{publicApplicationRole(){//this.Id=Guid.NewGuid();}publicApplicationRole(stringname):this(){this.Name=name;}}publicclassApplicationRoleClaim:IdentityRoleClaim{}//[未映射]publicclassApplicationUserClaim:IdentityUserClaim{}publicclassApplicationUserLogin:IdentityUserLogin{}publicclassApplicationUserRole:IdentityUserRole{}publicclassApplicationUserToken:IdentityUserToken{}“UserStore`4[TUser,TRole,TContext,TKey]'违反了'TUser'类的约束“您需要使用Guid创建UserStore,并更改DbContext{}}newApplicationDbContextinheritancepublicclassApplicationDbContext:IdentityDbContext{publicApplicationDbContext(DbContextOptionsoptions):base(options){}protectedoverridevoidOnModelservice(ModelBuilderbuilder){base.OnModelCreating(buildercs);}}在你的启动中.AddIdentity().AddUserStore().AddEntityFrameworkStores().AddDefaultTokenProviders();在自定义用户和角色实体的情况下指定.AddEntityFrameworkStore()方法的键。启动时注册身份以上为C#学习教程:AspNetCore.Identity不能使用自定义用户/角色实现所有内容共享。如果对大家有用,需要进一步了解C#学习教程,还望大家多多关注—.AddEntityFrameworkStores()本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
