Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
As Ferramentas do EF Core apenas estruturam migrações para o provedor ativo. Às vezes, no entanto, talvez você queira usar mais de um provedor (por exemplo, Microsoft SQL Server e SQLite) com seu DbContext. Lide com isso mantendo vários conjuntos de migrações, um para cada provedor, e adicionando uma migração a cada alteração de modelo.
Usando vários tipos de contexto
Uma maneira de criar vários conjuntos de migração é usar um tipo DbContext por provedor.
class SqliteBlogContext : BlogContext
{
protected override void OnConfiguring(DbContextOptionsBuilder options)
=> options.UseSqlite("Data Source=my.db");
}
Especifique o tipo de contexto ao adicionar novas migrações.
dotnet ef migrations add InitialCreate --context BlogContext --output-dir Migrations/SqlServerMigrations
dotnet ef migrations add InitialCreate --context SqliteBlogContext --output-dir Migrations/SqliteMigrations
Dica
Você não precisa especificar o diretório de saída para migrações subsequentes, pois elas são criadas como irmãos para a última.
Usando um tipo de contexto
Também é possível utilizar um tipo de DbContext. Atualmente, é necessário mover as migrações para um assembly separado. Consulte o Uso de um Projeto de Migrações Separado para obter instruções sobre como configurar seus projetos.
Dica
Você pode visualizar o exemplo de deste artigo no GitHub.
Você pode passar argumentos para o aplicativo a partir das ferramentas. Isso pode habilitar um fluxo de trabalho mais simplificado que evita a necessidade de fazer alterações manuais no projeto ao executar as ferramentas.
Aqui está um padrão que funciona bem ao usar um Host Genérico.
public static IHostBuilder CreateHostBuilder(string[] args)
=> Host.CreateDefaultBuilder(args)
.ConfigureServices(
(hostContext, services) =>
{
services.AddHostedService<Worker>();
// Set the active provider via configuration
var configuration = hostContext.Configuration;
var provider = configuration.GetValue("Provider", "SqlServer");
services.AddDbContext<BlogContext>(
options => _ = provider switch
{
"Sqlite" => options.UseSqlite(
configuration.GetConnectionString("SqliteConnection"),
x => x.MigrationsAssembly("SqliteMigrations")),
"SqlServer" => options.UseSqlServer(
configuration.GetConnectionString("SqlServerConnection"),
x => x.MigrationsAssembly("SqlServerMigrations")),
_ => throw new Exception($"Unsupported provider: {provider}")
});
});
Como o construtor de host padrão lê a configuração de argumentos de linha de comando, você pode especificar o provedor ao executar as ferramentas.
dotnet ef migrations add MyMigration --project ../SqlServerMigrations -- --provider SqlServer
dotnet ef migrations add MyMigration --project ../SqliteMigrations -- --provider Sqlite
Dica
O token --
direciona dotnet ef
para tratar tudo o que se segue como um argumento e não tentar analisá-los como opções. Todos os argumentos extras não usados por dotnet ef
são encaminhados para o aplicativo.