从迁移中排除 DbContext 以避免 Context-Parameter

Posted

技术标签:

【中文标题】从迁移中排除 DbContext 以避免 Context-Parameter【英文标题】:Exclude DbContext from migrations to avoid Context-Parameter 【发布时间】:2016-08-27 17:09:40 【问题描述】:

我正在使用 ASP.NET EF Core 和 mysql(Pomelo.EntityFrameworkCore.MySql 驱动程序)。因为这样的上下文需要一些特定的配置行,而 MSSQL 的默认 DbContext 没有,我创建了一个 MySqlContext:

public class MySqlContext : DbContext 
    string connectionString;
    // ...

所以我所有的 DbContexts 都继承自这些类:

public class MyDbContext: MySqlContext 
    public DbSet<MyModel> MyModels get; set; 
    // ...

在我的项目中,我目前有一个包含 DbSet 的上下文 (DbContext)。还有 MySqlContext,它不是像这样的真实上下文,因为它没有 DbSet,仅充当 MySQL 配置的包装器,以便我可以更好地重用它们。

但似乎迁移会将它们视为两个不同的上下文,因为当我使用命令 Add-Migration Test 添加迁移时出现错误

找到多个 DbContext。指定使用哪一个。对 PowerShell 命令使用“-Context”参数,对 dotnet 命令使用“--context”参数。

因此,在每次迁移时,我都必须将 -Context MyContext 添加到命令中。我想避免这种情况,因为正如我所说,第二个 MySqlContext 不是包含模型和迁移的真实上下文。有没有办法告诉迁移工具这一点?我需要类似 EF 模型的 [NotMapped] 属性,它告诉 EF:不要将此属性存储到数据库中。像这样我需要告诉 EF:忽略 MySqlContext 类,因为它们不需要迁移。

【问题讨论】:

【参考方案1】:

使基类抽象:

public abstract class MySqlContext : DbContext 
    string connectionString;
    // ...

【讨论】:

该死的,事后如此简单和合乎逻辑,谢谢!在这里我们说“有时,你只见树木不见森林”:D【参考方案2】:

Use-DbContext MyContext 命令会将MyContext 设置为用于 PowerShell 会话的默认上下文。这是避免每次都必须指定-Context 的另一种方法。

【讨论】:

以上是关于从迁移中排除 DbContext 以避免 Context-Parameter的主要内容,如果未能解决你的问题,请参考以下文章

@media 查询以在 SASS 中排除 iOS 设备

初始数据库迁移:没有为此 DbContext 配置数据库提供程序

由于 dotnet ef dbcontext --json 失败,无法在 Visual Studio 2019 中列出实体框架迁移

我应该如何编写转换数据的实体框架迁移(最好使用 DbContext)?

为CLI实体框架迁移的DbContext建立连接字符串时出现问题。

无法在运行时设置 DbContext 连接字符串并将项目与应用程序分开的情况下运行 EF 迁移