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

时间:2016-08-27 17:09:41

标签: ef-code-first asp.net-core asp.net-core-mvc database-migration entity-framework-core

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

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

所以我的所有DbContex都都继承自那些类:

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

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

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

  

找到了多个DbContext。指定要使用的那个。对PowerShell命令使用'-Context'参数,对dotnet命令使用'--context'参数。

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

2 个答案:

答案 0 :(得分:6)

使基类抽象:

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

答案 1 :(得分:2)

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