Erstellen der Tabelle und einfügen von Daten in die es während der EF code first-migration
Bin ich mit Entity Framework Code First mit Code First-Migrationen.
Während einer migration, muss ich eine neue Tabelle zu erstellen, und fügen Sie einige Daten in Sie.
So, ich erstelle die Tabelle mit :
CreateTable("MySchema.MyNewTable",
c => new
{
MYCOLUMNID = c.Int(nullable: false, identity: true),
MYCOLUMNNAME = c.String(),
})
.PrimaryKey(t => t.MYCOLUMNID);
Dann versuche ich Daten einfügen mit :
using (var context = new MyContext())
{
context.MyNewTableDbSet.AddOrUpdate(new[]
{
new MyNewTable
{
MYCOLUMNNAME = "Test"
}
});
context.SaveChanges();
}
Aber ich bekomme eine Fehlermeldung :
Ungültiger Objektname 'mySchema.MyNewTable'.
Ist es möglich, das zu tun, was ich brauche ? Erstellen Sie eine Tabelle und inserto Daten in es in der gleichen migration ?
Ich habe bereits andere Migrationen, wo ich Tabellen erstellen oder einfügen von Daten in eine Tabelle, aber nie in der gleichen migration...
InformationsquelleAutor Gab | 2015-02-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Meine Empfehlung ist, verschieben, einfügen von code, um die Samen Methode. Migrationen stellte seine eigene
Seed
Methode auf die DbMigrationsConfiguration Klasse. DieseSeed
Methode unterscheidet sich von der Datenbank-InitialisierungSeed
Methode in zwei wichtigen Punkten:Update-Database
PowerShell-Befehl wird ausgeführt.Es sei denn, der Migrationen-Initialisierer verwendet wird, die Migrationen
Seed
wird die Methode nicht ausgeführt werden, wenn die Anwendung gestartet wird.
Migrationen entwickelt sich die Datenbank eher als fallenlassen und
neu zu erstellen.
Für diesen letzten Grund ist es sinnvoll, das
AddOrUpdate
Erweiterung Methode in derSeed
Methode.AddOrUpdate
überprüfen können, ob eine Person bereits in der Datenbank existiert und dann entweder einfügen einer neuen Entität, wenn es nicht bereits vorhanden ist, oder aktualisieren Sie die bestehenden Unternehmen, wenn es existiert.Also, versuchen Sie das Skript ausführen, die Sie wollen auf diese Weise:
Und die
Seed
Methode wird die Arbeit zum einfügen von Daten.Als Julie Lerman sagte Ihr blog:
InformationsquelleAutor octavioccl
Einen Weg zu tun, "zufällige" Dinge, die in der Völkerwanderung ist die Nutzung des Sql-Methode und pass, was die SQL-Anweisung, die Sie ausführen müssen, beispielsweise das einfügen von Daten.
Dies ist der beste Ansatz, wenn Sie wollen, Ihre Migrationen zu können, erstellen Sie eine vollständige migration zu SQL-Skript, einschließlich Ihrer Daten-Operationen (die Seed-Methode kann nur ausgeführt werden, im code und nicht erzeugen jedes sql-Skript).
InformationsquelleAutor Francesc Castells
Können Sie versuchen, diesen Ansatz:
nach dem erstellen der Tabelle,
erstellen Sie eine weitere leere migration in Ihrem Paket-Manager-Konsole verwenden:
Öffnen Sie dann die
.cs
- Datei mit der migration und, inUp()
Methode, fügen diesen code:Danach speichern und gehen Sie zurück zu der Paket-Manager-Konsole, und aktualisieren Sie die Datenbank mithilfe:
Verwenden Sie EntityFrameworkCore? Diese Frage betrifft EntityFramework6. In EntityFrameworkCore, die Sie verwenden würden
migrationBuilder.Sql()
(womigrationBuilder
ist der name des ersten Arguments auf IhreUp()
- Methode) anstelle vonthis.Sql()
.Danke, du hast Recht - das funktioniert nicht. Ich bin mit EF-core und habe mit beiden die akzeptierte Antwort und Ihren Vorschlag mit Erfolg in meinem Projekt.
InformationsquelleAutor Vishnu Mallipudi