base.OnModelCreating执行顺序错误致Sqlite身份角色表创建失败
解决Asp.NET Core Identity + Sqlite下自定义Role列类型不生效的问题
问题根源
你遇到的问题核心是**base.OnModelCreating(modelBuilder)的调用顺序错误**:当你把base方法放在自定义配置的代码块内部时,Identity框架的默认实体映射会覆盖你的自定义配置,导致Sqlite不支持的nvarchar类型被用于AspNetRoles表,最终触发DbCommand执行失败。
解决方案
将base.OnModelCreating(modelBuilder)的调用移到自定义配置代码之前,确保先执行Identity的默认配置,再用自定义配置覆盖默认设置。
正确代码示例
public class ApplicationDbContext : IdentityDbContext { public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) { } protected override void OnModelCreating(ModelBuilder modelBuilder) { // 先执行Identity框架的默认实体映射配置 base.OnModelCreating(modelBuilder); // 再添加自定义列类型配置,覆盖默认设置 modelBuilder.Entity<IdentityRole>(entity => { entity.Property(r => r.Name).HasColumnType("text"); entity.Property(r => r.NormalizedName).HasColumnType("text"); }); } }
后续操作
修改代码后,重新生成迁移脚本并更新数据库:
- 打开包管理器控制台,执行
Add-Migration UpdateRoleColumnType - 执行
Update-Database完成数据库更新
内容的提问来源于stack exchange,提问作者unelectricpostrequest
相关产品推荐
相关产品推荐

