Daten in der Migration ändern Methode Up - Entity Framework
Habe ich zusätzlich eine neue Eigenschaft in meine bestehende Modell. Es ist eine bool-Eigenschaft mit dem Standardwert true. Es gibt in dieser Tabelle vorhandenen Daten und ich möchte gerne eine bestimmte Zeile die neue Eigenschaft auf false direkt nach dem erstellen des neuen Felds in der Methode.
public override void Up()
{
AddColumn("dbo.RequestValidationErrors", "IsBreaking", c => c.Boolean(nullable: false));
using (Context ctx = new Context())
{
var validation = ctx.RequestValidationErrorSet.FirstOrDefault(x => x.WordCode == "RequestValidationError.MoreThanOneItemFound");
if (validation != null)
{
validation.IsBreaking = false;
ctx.SaveChanges();
}
}
}
Diese Weise EF wirft einen Fehler während sagen
System.InvalidOperationException: Das Modell hinter der
'DbContext" - Kontext hat sich geändert, seit dem die Datenbank erstellt wurde.
Erwägen Sie die Verwendung von Code First-Migrationen, die Datenbank zu aktualisieren
Ist es möglich, die Datenbank hier oder sollte ich es auch anderswo tun?
InformationsquelleAutor der Frage Perrier | 2015-11-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der Mitte von einer migration, ist es besser zu nutzen
Sql()
Methode zum aktualisieren von Daten in der Datenbank.Außerdem definieren Sie den Standardwert für die neue Spalte. Also die Lösung sollte so etwas wie dieses:
Mit einem
DbContext
in der Mitte von migration ist sehr zweideutig. Was erwarten Sie von der Kontext? Es hat die nach der migration Staat in seinen Modellen, aber die Datenbank hat die vor migration Zustand in den Tabellen. Also das model und die Datenbank nicht überein. Wenn Sie immer noch darauf bestehenDbContext
im code deaktivieren model-checking könnte die Lösung sein. Sie können deaktivieren model-checking mit:InformationsquelleAutor der Antwort mehrandvd
Wenn Sie verwenden möchten, den Rahmen für änderungen wie diese, sollten Sie separate Datenbank-änderungen von Daten ändert.
Erstellen einer migration nur für die änderungen in der Datenbank und ausführen.
Erstellen Sie dann eine neue migration (Up() und Down () - Methoden sind leer). Jetzt können Sie instanziieren Sie Ihr DatabaseContext und es gibt keine Fehler. Auf diesem Weg können Sie den Rahmen für diese Veränderungen, und richtig implementieren Down () - Methode.
InformationsquelleAutor der Antwort user868386
Schreiben DataMigrations für EF6 kann eine lästige Pflicht. Wir haben zusammen eine Bibliothek, die ich bin nur open Source hier für andere zu verwenden, fügt hinzu, dass in diesem lange versprochene, fehlende feature, EF6. Einfach schreiben-Klassen mit regelmäßigen EF-Abfragen usw.
https://github.com/b9chris/Brass9.Data
InformationsquelleAutor der Antwort Chris Moschini
Anstatt die
Sql
Methode können Sie auch dasUpdateData
Methode.(Ich weiß nicht, ob nur ef-core unterstützt diese Methode)
InformationsquelleAutor der Antwort NtFreX