如何修复Microsoft.Data.SqlClient.SqlException (0x80131904)无效列名错误
问题根因
该报错由线上数据库的表结构与当前代码的字段要求不匹配导致:你使用的是ASP.NET Core Identity身份框架,报错中提到的NormalizedEmail、ConcurrencyStamp、LockoutEnd、NormalizedUserName属于Identity内置AspNetUsers用户表的默认字段,UserType是你自行扩展的自定义用户字段。本地数据库已经通过EF迁移操作完成了结构同步,而线上数据库的AspNetUsers表缺少上述字段,触发SQL查询异常。
修复步骤
- 首先确认项目中线上环境的数据库连接字符串配置正确,没有错误指向其他未同步的旧库
- 其次完成EF迁移到线上库的同步操作,可根据你的线上环境权限二选一:
- 如果你本地可以直接连通线上数据库,将本地配置文件中的连接字符串临时替换为线上库连接信息,在包管理器控制台执行
Update-Database,即可将本地所有迁移记录直接同步到线上库 - 如果你不能直接连接线上数据库,在本地包管理器控制台执行
Script-Migration生成全量SQL迁移脚本,将脚本在线上数据库执行即可完成结构同步
- 如果你本地可以直接连通线上数据库,将本地配置文件中的连接字符串临时替换为线上库连接信息,在包管理器控制台执行
- 操作完成后手动校验线上库的
AspNetUsers表,确认报错提到的6个字段均已存在,字段类型与本地库完全一致
注意事项
如果线上库之前已经存在旧版本的Identity相关表,不要直接删除原有表重建,提前导出用户数据备份后再做结构同步,避免数据丢失
如果你是后续才新增的UserType自定义字段,需要确认该字段的添加逻辑已经包含在提交的迁移文件中,避免漏同步自定义字段
内容的提问来源于stack exchange,提问作者jacky
相关产品推荐
相关产品推荐

