【问题标题】:Delete one of many DbContexts?删除多个 DbContext 之一?
【发布时间】:2018-05-22 15:08:48
【问题描述】:

现在我有两个 DbContext,我一直在使用通常的 Add-Migration 和 Update-Database 维护它们。所以我在这个 ASP.NET Core MVC 应用程序中进行了多次迁移。现在我想删除其中一个上下文。仅通过删除我创建的从 DbContext 派生的类来执行此操作是行不通的,因为现在项目中的所有迁移都引用了 DbContext,如果将其删除,编译显然会失败。删除 DbContext(通过扩展删除数据库)的推荐方法是什么?

【问题讨论】:

  • 将引用从 context1 更改为 context2 不是更多的问题吗?如果没有上下文,则不会运行迁移。
  • 问题是与 DbContext 关联的资源。迁移已运行,因此已创建数据库。诚然,在当今时代,维护该数据库所涉及的资源很少(主要是磁盘空间)。但我希望它消失,就好像它从来没有存在过一样,所以在未来的某个时间里,不会有什么问题是这个从未使用过的上下文,或者这个从未使用过的数据库是什么。
  • 迁移只需要从数据库状态 A 到状态 N。如果所有数据库都处于状态 N,您可以安全地删除迁移并在以后根据需要重新实现它们。如果您的其他上下文引用了您需要的所有表,则可以安全地删除它。 POCO 类、注释(或流畅的代码)是定义您的模型的内容。您还可以随时对任何现有数据库进行逆向工程以重新创建它们。
  • 所以您建议删除数据库以使其进入状态 N。然后手动删除所有迁移以及 DbContext 类?
  • 那种。如果您删除了数据库和迁移,并且您有一个包含 DbSets 和流畅代码的上下文,并且您没有取消默认初始化程序 CreateDatabaseIfNotExists,那么当您启动应用程序时,它将创建具有正确结构的数据库。

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


【解决方案1】:

首先删除反向数据库中的所有迁移,如下所示:

Update-database -context [name Of Context to delete] -migration 0

然后删除所有迁移

Remove-migration -context [name Of Context to delete]

现在您可以随意删除上下文了。

注意:您从数据库中丢失了一些数据! (如果需要,请在数据库中创建数据备份 )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-02
    • 1970-01-01
    • 1970-01-01
    • 2017-11-08
    • 2019-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多