重命名 DbContext class 失去与现有 migrations/modelsnapshot 的关联

Renaming DbContext class loses association with existing migrations/modelsnapshot

我使用 Ef-Core 开发应用程序已经有一段时间了,这意味着我有多个现有的迁移(包括 ModelSnapshot)。现在我决定开始使用 SqlLite 进行本地开发(而托管版本仍然使用 SqlServer)。为了在代码中反映这一点,我又创建了两个 Context 类

SqlServerContext : AppContext {}

SqlLiteContext : AppContext {}

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

当我使用

创建新的迁移时
dotnet-ef migrations add TestMigration --context SqlServerContext

它会创建一个新的 ModelSnapshot (SqlServerContextModelSnapshot.cs),而不是继续使用现有的 (AppContextModelSnapshot.cs)。我必须指定上下文,因为迁移取决于所使用的数据库提供程序。

有没有办法告诉我的新上下文继续使用现有的模型快照作为基础?或者我是否使用了错误的上下文,是否有更好的方法来拥有特定于环境的数据库和配置?

由于之前开发的项目中已经到处引用了 AppContext,所以我不想简单地将 SqlServerContext 重命名为 AppContext,将 AppContext 重命名为其他名称(如 BaseContext)

Ivan Stoev 的评论是正确的!

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

谢谢!