C# Asp.Net MVC Core Identity迁移忽略ASPNETUsers表新增列问题
问题排查与解决办法
1. 检查DbContext配置
你的DbContext必须继承IdentityDbContext<ApplicationUser>,而非默认的IdentityDbContext(默认使用原生IdentityUser,无法识别自定义字段)。代码示例:
public class AppDbContext : IdentityDbContext<ApplicationUser> { public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { } }
2. 确认ApplicationUser的字段权限
EF Core无法识别私有/受保护字段,新增字段必须添加public修饰符:
public class ApplicationUser : IdentityUser { public string FullName { get; set; } // 必须为public public DateTime DateOfBirth { get; set; } }
3. 清理旧迁移重新生成
若之前创建过基于默认IdentityUser的迁移,快照文件会保留旧结构,导致新字段被忽略。操作步骤:
- 删除项目
Migrations文件夹下的所有迁移文件和快照文件 - 重新执行命令:
dotnet ef migrations add "CreateProdAuthDatabase" dotnet ef database update
4. 强制EF Core识别自定义字段
在DbContext的OnModelCreating方法中显式配置ApplicationUser,确保EF Core不会遗漏字段:
protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity<ApplicationUser>(entity => { entity.Property(u => u.FullName).IsRequired().HasMaxLength(100); entity.Property(u => u.DateOfBirth).IsRequired(); }); }
5. 核对连接字符串
确认appsettings.json中的连接字符串确实指向Azure上的目标空数据库,避免误迁移到本地或其他数据库实例。
6. 极端情况:清空数据库重来
若上述步骤均无效,由于你的数据库是全新无业务数据的状态,可直接删除Azure数据库中的所有表,再删除本地迁移文件,重新执行迁移和更新命令。
内容的提问来源于stack exchange,提问作者Goober
相关产品推荐
相关产品推荐

