【发布时间】: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