Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les outils EF Core structurent uniquement des migrations pour le fournisseur actif. Toutefois, vous souhaiterez peut-être utiliser plusieurs fournisseurs (par exemple Microsoft SQL Server et SQLite) avec votre DbContext. Gérez-le en conservant plusieurs ensembles de migrations- un pour chaque fournisseur- et en ajoutant une migration à chaque modification de modèle.
Utilisation de plusieurs types de contexte
Une façon de créer plusieurs jeux de migration consiste à utiliser un type DbContext par fournisseur.
class SqliteBlogContext : BlogContext
{
protected override void OnConfiguring(DbContextOptionsBuilder options)
=> options.UseSqlite("Data Source=my.db");
}
Spécifiez le type de contexte lors de l’ajout de nouvelles migrations.
dotnet ef migrations add InitialCreate --context BlogContext --output-dir Migrations/SqlServerMigrations
dotnet ef migrations add InitialCreate --context SqliteBlogContext --output-dir Migrations/SqliteMigrations
Tip
Vous n’avez pas besoin de spécifier le répertoire de sortie pour les migrations suivantes, car elles sont créées en tant qu'adjacents au dernier.
Utilisation d’un type de contexte
Il est également possible d’utiliser un type DbContext. Cela nécessite actuellement de déplacer les migrations dans un assembly séparé. Reportez-vous à l’utilisation d’un projet de migrations distincts pour obtenir des instructions sur la configuration de vos projets.
Tip
Vous pouvez afficher l'exemple de cet article sur GitHub.
Vous pouvez transmettre des arguments à l’application à partir des outils. Cela peut permettre un flux de travail plus rationalisé qui évite d’avoir à apporter des modifications manuelles au projet lors de l’exécution des outils.
Voici un modèle qui fonctionne bien lors de l’utilisation d’un hôte générique.
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}")
});
});
Étant donné que le générateur d’hôtes par défaut lit la configuration à partir d’arguments de ligne de commande, vous pouvez spécifier le fournisseur lors de l’exécution des outils.
dotnet ef migrations add MyMigration --project ../SqlServerMigrations -- --provider SqlServer
dotnet ef migrations add MyMigration --project ../SqliteMigrations -- --provider Sqlite
Tip
Le jeton -- dirige dotnet ef pour traiter tout ce qui suit comme argument, sans essayer de les analyser en tant qu’options. Tous les arguments supplémentaires, non utilisés par dotnet ef, sont transférés à l’application.