删除应用的迁移会自动修改数据库吗?

时间:2019-07-31 14:46:19

标签: c# entity-framework asp.net-core entity-framework-core

我是EF的新手,只是有关已应用迁移的删除/删除的问题。

我一直认为删除应用的迁移原因会导致数据库不同步,但是我发现它也会自动修改数据库。下面是我的代码:

首先,我有一个Product类:

public class Product
{
   public string Name { get; set; }
   public string Category { get; set; }
}

然后我创建了一个初始迁移并进行了更新

  

dotnet ef迁移添加初始

     

dotnet ef数据库更新

然后我将一个新属性InStock添加到Product类,然后发出命令

  

dotnet ef迁移添加AddInStock

     

dotnet ef数据库更新

然后我尝试通过以下方式删除此应用的迁移

  

dotnet ef迁移删除--force

CLI窗口显示日志消息,我看到Alter Table[Product] Drop Column [InStock],这意味着“ InStock”列已被删除。

如果是这种情况,为什么我总是听到“删除已应用的迁移将导致数据库不同步问题”?就我而言,数据库是通过删除应用的迁移来进行更新的,它始终与项目保持同步。

另一个问题是,上面的代码来自一本教科书,我遵循它进行学习,该教科书说发出强制解除命令时,将出现以下记录消息:

Removing migration '<timestamp>_AddInStock' without checking the database. If this
migration has been applied to the database, you will need to manually reverse the changes
it made.
Removing migration '<timestamp>_AddInStock'.
Reverting model snapshot.

但是为什么在发布dotnet ef migrations remove --force时我没有此消息?

1 个答案:

答案 0 :(得分:2)

dotnet ef migrations remove通常不会修改您的数据库,但是由于您使用的是--force选项,因此会进行修改。

如果未指定--force,则必须使用dotnet ef database update将数据库回滚到以前的迁移,然后才能调用remove

https://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/dotnet#dotnet-ef-migrations-remove