Meine Anwendung, die auf .NET Core portiert wird, verwendet den neuen EF Core mit SQLite. Ich möchte die Datenbank- und Tabellenstrukturen automatisch erstellen, wenn die App zum ersten Mal ausgeführt wird. Gemäß der EF-Kerndokumentation erfolgt dies mit manuellen Befehlen
dotnet ef migrations add MyFirstMigration
dotnet ef database update
Ich möchte jedoch nicht, dass der Endbenutzer diese Befehle eingibt, und möchte, dass die App die Datenbank für die erste Verwendung erstellt und einrichtet. Für EF 6 gibt es Funktionen wie
Database.SetInitializer(new CreateDatabaseIfNotExists<MyContext>());
Aber in EF Core scheinen diese nicht zu existieren. Ich kann keine Beispiele oder Dokumentation zu etwas finden, das für den EF-Kern gleichwertig ist, und es wird in der Liste der fehlenden Funktionen in der EF-Kerndokumentation nicht erwähnt. Ich habe die Modellklassen bereits eingerichtet, damit ich Code schreiben kann, um die Datenbank basierend auf den Modellen zu initialisieren, aber es wäre viel einfacher, wenn das Framework dies automatisch tun würde. Ich möchte das Modell nicht automatisch erstellen oder migrieren, sondern nur die Tabellenstrukturen in einer neuen Datenbank erstellen.
Fehlt mir hier etwas oder fehlt die Funktion zum automatischen Erstellen von Tabellen im EF-Kern?
quelle
Meine Antwort ist Ricardos Antwort sehr ähnlich, aber ich bin der Meinung, dass mein Ansatz etwas einfacher ist, einfach weil in seiner
using
Funktion so viel los ist, dass ich nicht einmal sicher bin, wie genau es auf einer niedrigeren Ebene funktioniert.Für diejenigen, die eine einfache und saubere Lösung suchen, die eine Datenbank für Sie erstellt, in der Sie genau wissen, was unter der Haube passiert, ist dies Folgendes:
Dies bedeutet so ziemlich, dass Sie innerhalb der von
DbContext
Ihnen erstellten (in diesem Fall meinerTargetsContext
) Instanz eine Instanz von verwenden können,DbContext
um sicherzustellen, dass die in der Klasse definierten Tabellen erstellt werden, wenn Startup.cs in Ihrer Anwendung ausgeführt wird.quelle
EnsureCreated
Umgeht Migrationen vollständig und erstellt nur das Schema für Sie. Sie können dies nicht mit Migrationen mischen.EnsureCreated
wurde für Tests oder Rapid Prototyping entwickelt, bei denen Sie die Datenbank jedes Mal löschen und neu erstellen können. Wenn Sie Migrationen verwenden und diese beim Start der App automatisch anwenden möchten, können Sie siecontext.Database.Migrate()
stattdessen verwenden.IHostingEnvironment
jetzt veraltet ist und die empfohlene Alternative istMicrosoft.AspNetCore.Hosting.IWebHostEnvironment
.Wenn Sie den Kontext über die Parameterliste von Configure in Startup.cs erhalten, können Sie stattdessen Folgendes tun:
quelle
Für EF Core 2.0+ musste ich einen anderen Ansatz wählen, da die API geändert wurde. Ab März 2019 empfiehlt Microsoft, dass Sie Ihren Datenbankmigrationscode in Ihre Anwendungseintragsklasse einfügen, jedoch außerhalb des WebHost-Buildcodes.
quelle
Wenn Sie keine Migrationen erstellt haben, gibt es zwei Möglichkeiten
1.Erstellen Sie die Datenbank und die Tabellen aus der Anwendung Main:
2.Erstellen Sie die Tabellen, wenn die Datenbank bereits vorhanden ist:
Danke an Bubis Antwort
quelle
EnsureCreated
oderEnsureDeleted
oderDatabase.Migrate
werden fehlschlagen"