Entity Framework移除数据种子:保留现有库数据,阻止新库用旧种子
先创建空迁移剥离HasData绑定
暂时保留OnModelCreating里的HasData代码,用命令生成新迁移:Add-Migration RemoveLegacySeedData(Package Manager Console)或dotnet ef migrations add RemoveLegacySeedData(CLI)。打开这个迁移文件,清空Up和Down方法里的所有代码——这样EF会标记该迁移已执行,但不会对现有数据库做任何操作,同时后续新数据库生成时,旧的HasData逻辑将不再生效。彻底移除HasData代码,替换为自定义初始化逻辑
把modelBuilder.Entity<>().HasData(...)全部从OnModelCreating中删除。编写一个初始化服务(比如DataInitializerService),添加InitializeAsync方法:当管理员首次登录校验通过后,检查数据库中是否存在必要的基础数据(如管理员角色、系统配置),若不存在则弹出交互提问,收集信息后插入数据库。在Blazor的登录逻辑中,校验通过后调用这个初始化方法即可。新数据库初始化流程自动适配
新数据库生成时会执行所有迁移(包括那个空迁移),由于已删除HasData代码,不会自动插入旧种子数据。等第一个管理员登录时,自定义初始化逻辑会触发,通过交互生成所需的新初始数据。确保生产数据库数据安全
之前你已编辑迁移删除了种子数据的删除/恢复代码,加上这个新的空迁移,生产数据库执行迁移时不会改动任何现有数据,原有种子数据会完整保留。可以先在测试环境模拟生产库状态,执行迁移验证数据完整性。
内容的提问来源于stack exchange,提问作者Ron

