重命名DbContext类将失去与现有迁移/模型的关联

问题描述

一段时间以来,我一直在使用Ef-Core开发应用程序,这意味着我已有多个现有迁移(包括ModelSnapshot)。现在,我决定开始使用sqlLite进行本地开发(而托管版本仍使用sqlServer)。为了在代码中体现这一点,我创建了另外两个Context类

sqlServerContext : AppContext {}

sqlLiteContext : AppContext {}

其中AppContext包含所有Db-Set,而派生类则设置了不同的连接和一些其他配置(例如用于本地开发的数据种子)。这些会在启动时通过依赖注入添加,具体取决于环境。

当我使用创建新迁移时

dotnet-ef migrations add TestMigration --context sqlServerContext

它将创建一个新的ModelSnapshot(sqlServerContextModelSnapshot.cs),而不是继续使用现有的ModelSnapshot(AppContextModelSnapshot.cs)。我必须指定上下文,因为迁移取决于所使用的Databaseprovider。

是否可以告诉我的新Context继续使用现有的ModelSnapshot作为基础?还是我使用的上下文错误,是否有更好的方法来拥有特定于环境的数据库和配置?

由于从先前的开发开始,项目中的任何地方都已经引用了AppContext,所以我不希望将sqlServerContext重命名为AppContext,而将AppContext重命名为其他名称(如BaseContext)

解决方法

Ivan Stoev的评论正确!

只需将AppContextModelSnapshot.cs重命名为SqlServerContextModelSnapshot.cs,并将[DbContext(typeof(AppContext))]的所有出现都替换为快照和所有迁移中的[DbContext(typeof(SqlServerContext))]

谢谢!