重命名 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))]
。
谢谢!
我使用 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))]
。
谢谢!