我有一个使用EntityFramework Core的IdentityServer。 我使用代码优先方法。每次我想编辑数据库时,例如添加表或向现有表中添加更多列,我都只是在代码中执行这些更改,然后在程序包管理器控制台中使用命令创建迁移文件。 当我运行IdentityServer时,它具有执行迁移的以下代码。
GlobalConfig.DatabaseConnectionString = configuration.GetValue<string>("DatabaseConnectionString");
var optionsBuilder = new DbContextOptionsBuilder<ApplicationDbContext>().UseSqlServer(GlobalConfig.DatabaseConnectionString);
using (var context = new ApplicationDbContext(optionsBuilder.Options))
{
context.Database.Migrate();
}
'ApplicationDbContext'只是扩展IdentityDbContext并实现IApplicationDbContext的类。
回到重点,
context.Database.Migrate();
如果我创建新数据库,则应用新迁移,即使使用现有数据库,它也会应用新更改。
现在是发生问题的地方。如果删除迁移后刚添加的列或表,则如果再次运行该程序,它将不会再次执行更改。为什么这是一个问题?
我在本地计算机上运行迁移,它执行迁移并更新数据库,但是当有人提取(在我的情况下,我公司的质量保证)我的解决方案并运行该程序时,它不会在他们的计算机上执行迁移。
我想知道我在做什么错,或者这在EntityFramework中是否正常。
我希望EF可以先检查数据库,如果它与代码中指定的不相等,请应用更改...或类似的方法。
谢谢!