Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
EF Core Tools samlar endast in migreringar för den aktiva providern. Ibland kanske du dock vill använda mer än en provider (till exempel Microsoft SQL Server och SQLite) med din DbContext. Hantera detta genom att underhålla flera uppsättningar migreringar – en för varje provider – och lägga till en migrering till var och en för varje modelländring.
Använda flera kontexttyper
Ett sätt att skapa flera migreringsuppsättningar är att använda en DbContext-typ per provider.
class SqliteBlogContext : BlogContext
{
protected override void OnConfiguring(DbContextOptionsBuilder options)
=> options.UseSqlite("Data Source=my.db");
}
Ange kontexttypen när du lägger till nya migreringar.
dotnet ef migrations add InitialCreate --context BlogContext --output-dir Migrations/SqlServerMigrations
dotnet ef migrations add InitialCreate --context SqliteBlogContext --output-dir Migrations/SqliteMigrations
Tips/Råd
Du behöver inte ange utdatakatalogen för efterföljande migreringar eftersom de skapas som syskon till den sista.
Använda en kontexttyp
Du kan också använda en DbContext-typ. Detta kräver för närvarande att migreringarna flyttas till en separat samling. Anvisningar om hur du konfigurerar dina projekt finns i Använda ett separat migreringsprojekt .
Tips/Råd
Du kan visa den här artikelns exempel på GitHub.
Du kan skicka argument till appen från verktygen. Detta kan möjliggöra ett mer effektivt arbetsflöde som undviker att behöva göra manuella ändringar i projektet när verktygen körs.
Här är ett mönster som fungerar bra när du använder en allmän värd.
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}")
});
});
Eftersom den förvalda värdbyggaren läser konfigurationen från kommandoradsargument, kan du ange leverantören när du kör verktygen.
dotnet ef migrations add MyMigration --project ../SqlServerMigrations -- --provider SqlServer
dotnet ef migrations add MyMigration --project ../SqliteMigrations -- --provider Sqlite
Tips/Råd
Det --
-token dirigerar dotnet ef
att behandla allt som följer som ett argument och inte försöka parsa dem som alternativ. Eventuella extra argument som inte används av dotnet ef
vidarebefordras till appen.