Erstellen Sie eine Tabelle, wenn es nicht vorhanden ist?
Mithilfe von Entity Framework-Kern, gibt es eine Möglichkeit, um die Tabelle zu erstellen, wenn es noch nicht existiert? Ausnahme werfen wird, auch wenn EnsureCreated
heißt in dem Kontext:
DbSet<Ticker> Ticker { get; set }
Database.EnsureCreated();
Ticker.Add(...);
dbctx.SaveChanges(); <== exception
Ergebnisse in Ausnahme:
System.Daten.SqlClient.SqlException: Ungültiger Objektname 'Ticker'
Gibt es eine Möglichkeit, um die Tabelle zu erstellen Ticker
bevor die Daten eingefügt werden?
== EDIT==
Dieser Fragen ist nicht zu erstellen/migrieren die gesamte Datenbank, die Datenbank immer vorhanden und die meisten seiner Tabellen gibt es auch, aber einige der Tabellen nicht. So brauche ich nur eine oder zwei Tabellen im runtime.
- Möglich, Duplikat der Prüfen Sie, ob eine Tabelle existiert in der Datenbank mit LINQ
- Sie sind also darauf hindeutet, dass es keine Möglichkeit gibt, es zu tun?
- Ich schlage vor, Sie überprüfen können, ob die Tabelle vorhanden ist, und erstellen Sie es, wenn nicht.
- Ja, das ist eine gute Idee, aber wie zu tun, dass im EntityFramework?
- Was ist mit stackoverflow.com/questions/6100969/...? es gibt viele Beispiele.
- Ok, so überprüfen Sie die besteht aus einer Tabelle kann man mit EFCore aus, aber das erstellen der Tabelle durchgeführt werden müssen, um mit raw-sql-Abfrage? Ich fragte, weil ich vermeiden wollen, verwenden Sie die sql-Anweisung direkt in ein EFCore Anwendung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie ein paar Optionen hier. Das einfachste ist zu tun:
Oder tun Sie es die Initialisierung Stil, indem Sie diesen in Ihrem Kontext Konstruktor:
Beide jedoch benötigen Sie drop schema manuell jedes mal, wenn Sie geändert haben, Modell und müssen die Datenbank neu erstellen. Wenn Sie nicht wollen, zu tun, dass Sie können verwenden Sie folgende Initialisierung statt:
Dieser wird überprüfen Sie Ihr Modell gegen die Datenbank jedes mal, wenn Sie das Programm auszuführen, und automatisch löschen und neu erstellen der Datenbank, wenn das Modell geändert wurde.
EDIT:
Wenn Sie nicht möchten, löschen Sie die Datenbank, und einfach aktualisieren, dann Sie können verwenden Sie folgende Initialisierung:
SetInitializer
Methode nicht existiert, EFCore: docs.microsoft.com/en-us/ef/core/api/...In Ihrem Startup.cs
Und Stellen Sie sicher, dass die Verbindungszeichenfolge ist richtig, wie hier (MySQL, XAMPP) in Ihrem AppDBContext
Meine Vermutung ist, dass Ihr Kontext ist falsch definiert. Vielleicht haben Sie vergessen, hinzuzufügen, die DbSet zu Ihrem Kontext umgesetzt werden?
Code unten funktioniert perfekt, und ich habe ehrlich gesagt lieber EnsureCreated() in den Konstruktor der tatsächlichen DBContext Umsetzung.
TaskExecutionInformation ist nur PoCo und könnte alles sein. Siehe unten, aber wenn Sie brauchen Sie ein bisschen Anleitung.
In Entity framework Core können Sie verwenden Sie den folgenden code in Ihre DbContext zum erstellen von Tabellen in Ihrer Datenbank, wenn Sie nicht existieren:
Datenbank.EnsureCreated() nicht erstellen Sie das schema (also deine Tabellen), wenn die Datenbank bereits existiert. Das ist der Grund, warum Sie diese Ausnahme.
Sie können überprüfen, ob die Methode Dokumentation.