无法将EntityLayer.Concrete.AppUser隐式转换为IdentityUser,请求错误排查帮助
问题排查方案
检查AppUser类的继承关系
你的AppUser类必须继承自Microsoft.AspNetCore.Identity.IdentityUser(如果自定义了主键类型,要使用泛型版本IdentityUser<TKey>)。修改类定义如下:using Microsoft.AspNetCore.Identity; namespace EntityLayer.Concrete { public class AppUser : IdentityUser { // 自定义属性写在这里 } }若使用int类型主键,需调整为:
public class AppUser : IdentityUser<int> { // 自定义属性写在这里 }确认DbContext的泛型参数
你的DbContext要继承IdentityDbContext<AppUser>(匹配主键类型),示例代码:using Microsoft.AspNetCore.Identity.EntityFrameworkCore; using Microsoft.EntityFrameworkCore; using EntityLayer.Concrete; public class YourDbContext : IdentityDbContext<AppUser> { public YourDbContext(DbContextOptions<YourDbContext> options) : base(options) { } // 自定义DbSet定义 }若用自定义主键,需改为
IdentityDbContext<AppUser, IdentityRole<int>, int>这类泛型形式。检查依赖注入配置
在Program.cs(或Startup.cs)配置Identity服务时,要指定AppUser作为用户类型:builder.Services.AddDefaultIdentity<AppUser>(options => options.SignIn.RequireConfirmedAccount = true) .AddEntityFrameworkStores<YourDbContext>();或使用AddIdentity方式:
builder.Services.AddIdentity<AppUser, IdentityRole>() .AddEntityFrameworkStores<YourDbContext>() .AddDefaultTokenProviders();清理并重新生成项目
修改代码后,右键项目选择「清理」,再重新生成,避免编译缓存导致的错误。
错误本质:ASP.NET Core Identity组件要求用户类必须继承IdentityUser,你的AppUser未满足该继承要求,因此出现类型转换失败的提示。
内容的提问来源于stack exchange,提问作者Karayeniceri
相关产品推荐
相关产品推荐

