从迁移中排除 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的主要内容,如果未能解决你的问题,请参考以下文章
初始数据库迁移:没有为此 DbContext 配置数据库提供程序
由于 dotnet ef dbcontext --json 失败,无法在 Visual Studio 2019 中列出实体框架迁移
我应该如何编写转换数据的实体框架迁移(最好使用 DbContext)?