Notes
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 EF Core Tools génèrent 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
Conseil / Astuce
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 assemblage séparé. Reportez-vous à l’utilisation d’un projet de migrations distincts pour obtenir des instructions sur la configuration de vos projets.
Conseil / Astuce
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
Conseil / Astuce
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.