Training
Modul
Verwenden einer Datenbank mit minimaler API, Entity Framework Core und ASP.NET Core - Training
Erfahren Sie, wie Sie einer Anwendung mit minimaler API eine Datenbank hinzufügen.
Dieser Browser wird nicht mehr unterstützt.
Führen Sie ein Upgrade auf Microsoft Edge durch, um die neuesten Features, Sicherheitsupdates und den technischen Support zu nutzen.
Die EF Core Tools erstellen nur ein Gerüst für Migrationen für den aktiven Anbieter. Manchmal möchten Sie jedoch möglicherweise mehrere Anbieter (z. B. Microsoft SQL Server und SQLite) mit Ihrem DbContext verwenden. Behandeln Sie dies, indem Sie mehrere Gruppen von Migrationen verwalten – eine für jeden Anbieter – und für jede Modelländerung eine Migration hinzufügen.
Eine Möglichkeit zum Erstellen mehrerer Migrationsgruppen besteht darin, einen DbContext-Typ pro Anbieter zu verwenden.
class SqliteBlogContext : BlogContext
{
protected override void OnConfiguring(DbContextOptionsBuilder options)
=> options.UseSqlite("Data Source=my.db");
}
Geben Sie den Kontexttyp beim Hinzufügen neuer Migrationen an.
dotnet ef migrations add InitialCreate --context BlogContext --output-dir Migrations/SqlServerMigrations
dotnet ef migrations add InitialCreate --context SqliteBlogContext --output-dir Migrations/SqliteMigrations
Tipp
Sie müssen das Ausgabeverzeichnis für nachfolgende Migrationen nicht angeben, da sie als gleichgeordnete Objekte der letzten Migration erstellt werden.
Es ist auch möglich, einen DbContext-Typ zu verwenden. Dies erfordert derzeit das Verschieben der Migrationen in eine separate Assembly. Anweisungen zum Einrichten Ihrer Projekte finden Sie unter Verwendung eines separaten Migrationsprojekts.
Tipp
Das in diesem Artikel verwendete Beispiel finden Sie auf GitHub.
Sie können Argumente aus den Tools an die App übergeben. Dadurch kann ein optimierter Workflow ermöglicht werden, so dass keine manuellen Änderungen am Projekt vorgenommen werden müssen, wenn die Tools ausgeführt werden.
Hier ist ein Muster, das bei der Verwendung eines generischen Hosts gut funktioniert.
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}")
});
});
Da der Standardhostgenerator die Konfiguration von Befehlszeilenargumenten liest, können Sie den Anbieter angeben, wenn Sie die Tools ausführen.
dotnet ef migrations add MyMigration --project ../SqlServerMigrations -- --provider SqlServer
dotnet ef migrations add MyMigration --project ../SqliteMigrations -- --provider Sqlite
Tipp
Das --
-Token weist dotnet ef
an, alles nachfolgende als Argument zu behandeln und nicht zu versuchen, es als Optionen zu parsen. Alle zusätzlichen Argumente, die von dotnet ef
nicht verwendet werden, werden an die App weitergeleitet.
Feedback zu .NET
.NET ist ein Open Source-Projekt. Wählen Sie einen Link aus, um Feedback zu geben:
Training
Modul
Verwenden einer Datenbank mit minimaler API, Entity Framework Core und ASP.NET Core - Training
Erfahren Sie, wie Sie einer Anwendung mit minimaler API eine Datenbank hinzufügen.