EF6项目Docker SQL Server更新数据库时删除不存在列报错
解决EF6自动迁移残留旧列引用的问题
1. 彻底清理迁移相关文件
- 手动删除项目
Migrations文件夹下所有迁移文件(保留Configuration.cs即可) - 检查
DbContext对应的模型快照文件(如YourContextModelSnapshot.cs),确认无ColumnName的任何引用,若有直接删除对应代码段
2. 重置迁移基线
打开Package Manager Console(PMC),执行命令生成空的初始迁移,将当前模型设为基线:
Add-Migration InitialCreate -IgnoreChanges
3. 更新全新数据库
对全新部署的Docker SQL Server执行数据库更新:
Update-Database
此操作会将初始迁移记录写入__MigrationHistory表,后续迁移将完全基于当前模型生成。
4. 排查自动迁移配置
检查Configuration.cs中的自动迁移设置,清理可能存在的自定义硬编码逻辑:
internal sealed class Configuration : DbMigrationsConfiguration<YourDbContext> { public Configuration() { AutomaticMigrationsEnabled = true; AutomaticMigrationDataLossAllowed = true; } // 检查Seed方法或其他自定义迁移逻辑,确保无旧列相关代码 }
5. 确保Docker数据库完全干净
- 删除旧的SQL Server容器及关联卷,避免残留旧数据文件:
docker rm -f your-sql-container docker volume rm your-sql-volume
- 重新创建容器,确保启动的是完全全新的数据库实例
内容的提问来源于stack exchange,提问作者Gary Frewin
相关产品推荐
相关产品推荐

