与 Entity 合作时,迁移存在问题。我开始了一个简单的 WEB API 项目。我有两个基地:测试和生产。在开发过程中,我连接到一个测试基地。我添加了模型,生成了迁移,将数据库更新为这些迁移,将数据库添加到数据库中。以下是一些命令:
dotnet ef migrations add FirstMigration
dotnet ef database update
也就是说,我添加了几个模型,创建了一个迁移,我以它的名义简要展示了它的确切作用。我添加了数据,对其进行了测试,然后继续执行应用程序的下一部分。一切都很好,直到需要发布应用程序并连接生产基地。
为此我创建了一个文件appsettings.Production.json
{
"ConnectionStrings": {
"Recipes" : "connection string here"
},
"Logging": {
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
}
}
}
为生产数据库设置连接字符串。设置环境变量"ASPNETCORE_ENVIRONMENT": "Production"。
接下来,我计划在我为开发基地制定的生产基地上执行所有这些迁移。但随后一个惊喜等着我:
执行后dotnet ef database update我得到了这个:
No migrations were applied. The database is already up to date.
Done.为什么会这样?谷歌搜索,但每个人都建议这样:删除迁移文件夹,清除数据库并再次运行迁移。有用。但这是胡说八道!那么这些迁移是什么?毕竟,需要迁移才能保存数据库更改的历史记录。因此,每次更改时,我都需要覆盖基础。马马虎虎的解决方案。
以防万一,我将我的 ApplicationContext 固定在这里
public class ApplicationContext : DbContext
{
private readonly string _connectionString;
public ApplicationContext(IConfiguration configuration)
{
_connectionString = configuration.GetConnectionString("Recipes");
}
public DbSet<User> Users { get; set; }
public DbSet<Recipe> Recipes { get; set; }
public DbSet<RecipeStep> RecipeSteps { get; set; }
public DbSet<Ingredient> Ingridients { get; set; }
public DbSet<Category> Categories { get; set; }
public DbSet<Advertising> Advertisings { get; set; }
public DbSet<FileModel> Files { get; set; }
public DbSet<RecipeLike> RecipeLikes { get; set; }
public DbSet<RecipeDislike> RecipeDislikes { get; set; }
public DbSet<Bookmark> Bookmarks { get; set; }
public DbSet<Purchase> Purchases { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseNpgsql(_connectionString);
}
}
迁移:
Entity 如何理解迁移已经执行?毕竟,我连接到另一个数据库,并且迁移历史存储在__EFMigrationsHistory. 顺便说一句,这个表在错误输出之后是空的No migrations were applied. The database is already up to date. Done.。也许我只是不明白与实体合作的过程?如果您在类似模式下工作,请描述您的流程(我是指测试和生产基地)

一切都在文件中
.Designer.cs这个文件的丢失导致了我描述的问题。