You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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");
        });
    }
}

后续操作

修改代码后,重新生成迁移脚本并更新数据库:

  1. 打开包管理器控制台,执行Add-Migration UpdateRoleColumnType
  2. 执行Update-Database完成数据库更新

内容的提问来源于stack exchange,提问作者unelectricpostrequest

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 20:49:53