Blazor Server自定义Identity Model时EF迁移未识别ApplicationUser新增属性
你的实现思路完全正确,迁移无法识别自定义用户属性的问题不属于Blazor专属配置遗漏,核心原因是ApplicationDbContext的泛型绑定未同步修改,对应修复方案如下:
1. 修正ApplicationDbContext继承定义
默认项目模板生成的ApplicationDbContext默认绑定原生IdentityUser,需修改父类的泛型参数为你的自定义类:
// 修改前 public class ApplicationDbContext : IdentityDbContext<IdentityUser> { public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) { } } // 修改后 public class ApplicationDbContext : IdentityDbContext<ApplicationUser> { public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) { } }
完成该修改后EF Core才能正确识别ApplicationUser的扩展属性。
2. 清理历史迁移重新生成
如果之前已经基于原生IdentityUser生成过初始迁移,需先删除项目Migrations目录下的所有文件、删除已创建的数据库,再重新执行迁移命令:
Add-Migration InitialCreate Update-Database
新生成的迁移的Up方法会自动包含FullName、MobileNumber、IdentityNumber三个字段的创建逻辑。
3. 手动修改迁移兼容方案
如果你不需要清空历史迁移,可直接手动补充字段定义,在新增的迁移的Up方法中添加以下代码:
migrationBuilder.AddColumn<string>( name: "FullName", table: "AspNetUsers", maxLength: 256, nullable: true); migrationBuilder.AddColumn<string>( name: "MobileNumber", table: "AspNetUsers", maxLength: 32, nullable: true); migrationBuilder.AddColumn<string>( name: "IdentityNumber", table: "AspNetUsers", maxLength: 64, nullable: true);
同时在Down方法中补充对应删除逻辑即可:
migrationBuilder.DropColumn( name: "FullName", table: "AspNetUsers"); migrationBuilder.DropColumn( name: "MobileNumber", table: "AspNetUsers"); migrationBuilder.DropColumn( name: "IdentityNumber", table: "AspNetUsers");
手动添加的字段和EF自动生成的字段效果完全一致,不会影响后续Identity功能的正常使用。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

