如何完全删除添加新 table 的 EF 迁移
How to delete EF migration that adds a new table completely
我正在尝试删除迁移,但这会导致出现一些奇怪的情况。
要创建此迁移,我:
- 已创建 class,代表数据库中的 table
- 将其添加到我的 DbContext
- 迁移的脚手架
作为新 table 创建的结果,一切都按预期进行。直到我决定我不再需要那个 table(但那时我已经创建了一些其他迁移 - 所以我试图删除的迁移不是最后一个)所以我:
- 恢复到我要删除的那个迁移之前的一个迁移
- 已删除迁移
- 已从 DbContext 中删除
- 删除了那个class(彻底粉碎并清空了一个回收站)
- 更新了我的数据库
我得到了一个错误:Unable to update database to match the current model because there are pending changes and automatic migration is disabled.
为了查明到底是什么未决,我尝试添加新的迁移,而新的迁移在它的 Up
方法中删除了 table不再存在并在 Down
方法中创建 table(与原始迁移所做的完全相反)。
我什至尝试删除我的数据库并从头开始生成它,但没有成功 - 进入相同的状态。
我尝试试验发现的奇怪行为:
- 当我将 class 添加回去并将其添加到 DbContext 时,我没有收到任何错误,但在数据库
中没有 table
- 当我恢复新的迁移(在
Down
中创建一个新的 table)时 - 没有任何反应 - table 未创建
那么我怎样才能完全摆脱 class 和迁移呢?
这里有两种选择。
首先是添加一个额外的迁移来删除 table。这是最简单的并且可能是 "best practice" 路线(特别是如果迁移已经在生产中)。唯一的缺点是您将进行 2 次迁移,这些迁移仅用于相互抵消。但这不一定是坏事。为此:
- 确保数据库更新为当前模型(包括table)
- 删除实体class
- 在您的 DbContext 中删除对它的引用。
- 生成新迁移。新迁移应该只删除 table.
- 更新数据库。
如果您出于某种原因想要限制迁移数量,您需要执行以下操作:
- 删除数据库
- 删除您要删除的迁移及其后的所有迁移
- 移除实体class
- 从 DbContext 中删除
- 更新数据库(您会收到一条警告,指出数据库与模型不匹配,但这没关系。)
- 添加迁移
- 更新数据库
编码愉快。
我正在尝试删除迁移,但这会导致出现一些奇怪的情况。
要创建此迁移,我:
- 已创建 class,代表数据库中的 table
- 将其添加到我的 DbContext
- 迁移的脚手架
作为新 table 创建的结果,一切都按预期进行。直到我决定我不再需要那个 table(但那时我已经创建了一些其他迁移 - 所以我试图删除的迁移不是最后一个)所以我:
- 恢复到我要删除的那个迁移之前的一个迁移
- 已删除迁移
- 已从 DbContext 中删除
- 删除了那个class(彻底粉碎并清空了一个回收站)
- 更新了我的数据库
我得到了一个错误:Unable to update database to match the current model because there are pending changes and automatic migration is disabled.
为了查明到底是什么未决,我尝试添加新的迁移,而新的迁移在它的 Up
方法中删除了 table不再存在并在 Down
方法中创建 table(与原始迁移所做的完全相反)。
我什至尝试删除我的数据库并从头开始生成它,但没有成功 - 进入相同的状态。
我尝试试验发现的奇怪行为:
- 当我将 class 添加回去并将其添加到 DbContext 时,我没有收到任何错误,但在数据库 中没有 table
- 当我恢复新的迁移(在
Down
中创建一个新的 table)时 - 没有任何反应 - table 未创建
那么我怎样才能完全摆脱 class 和迁移呢?
这里有两种选择。
首先是添加一个额外的迁移来删除 table。这是最简单的并且可能是 "best practice" 路线(特别是如果迁移已经在生产中)。唯一的缺点是您将进行 2 次迁移,这些迁移仅用于相互抵消。但这不一定是坏事。为此:
- 确保数据库更新为当前模型(包括table)
- 删除实体class
- 在您的 DbContext 中删除对它的引用。
- 生成新迁移。新迁移应该只删除 table.
- 更新数据库。
如果您出于某种原因想要限制迁移数量,您需要执行以下操作:
- 删除数据库
- 删除您要删除的迁移及其后的所有迁移
- 移除实体class
- 从 DbContext 中删除
- 更新数据库(您会收到一条警告,指出数据库与模型不匹配,但这没关系。)
- 添加迁移
- 更新数据库
编码愉快。