ASP.NET Core 8.0 Blazor登录时IdentityUserLogin主键未定义异常
解决ASP.NET Core 8.0 Blazor中IdentityUserLogin的主键错误
错误根源:你在配置
GuardianList实体时,可能意外覆盖或破坏了Identity框架默认的IdentityUserLogin实体配置。Identity的内置实体(比如IdentityUserLogin<TKey>)原本有默认主键配置,但如果OnModelCreating方法中未正确保留Identity的基础配置逻辑,就会触发该错误。解决步骤:
- 检查
ApplicationDbContext的OnModelCreating方法,确保优先调用Identity的基础配置:protected override void OnModelCreating(ModelBuilder modelBuilder) { // 必须先调用此行,保留Identity默认实体配置 base.OnModelCreating(modelBuilder); // 再配置你的GuardianList视图实体 modelBuilder.Entity<GuardianList>(entity => { entity.ToView("vwGuardianList"); // 映射到数据库视图 entity.HasNoKey(); // 视图为无键实体,必须添加此配置 }); // 其他自定义实体配置... } - 确认
GuardianList配置正确:数据库视图属于无键数据集,必须用HasNoKey()标记,同时通过ToView指定对应的数据库视图名称。 - 若你手动配置过Identity相关实体(如
IdentityUserLogin),检查是否误删了主键配置。IdentityUserLogin<TKey>默认以LoginProvider和ProviderKey组合作为主键,不要随意修改该配置。
- 检查
额外排查:如果以上操作无效,确认
ApplicationDbContext是否正确继承自IdentityDbContext<IdentityUser>(或自定义用户类型),保证Identity的实体集被正确加载。
内容的提问来源于stack exchange,提问作者GeoffreyB
相关产品推荐
相关产品推荐

