Problem
Eine Klasse, die als Entität in EF Core verwendet wird, soll umbenannt werden. Der Name der Tabelle in der Datenbank soll ebenfalls geändert werden. In diesem Zusammenhang wurde ebenfalls die Eigenschaft im entsprechenden DbContext angepasst. Bei der Erstellung der Migration wird folgende Meldung angezeigt:
Der generierte Code hat folgenden Aufbau:
protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.DropForeignKey( name: "FK_Unterstuetzungen_Sponsorkategorien_SponsorkategorieId", schema: "Sponsoren", table: "Unterstuetzungen"); migrationBuilder.DropTable( name: "Sponsorkategorien", schema: "Sponsoren"); migrationBuilder.DropIndex( name: "IX_Unterstuetzungen_SponsorkategorieId", schema: "Sponsoren", table: "Unterstuetzungen"); migrationBuilder.AddColumn<Guid>( name: "KategorieId", schema: "Sponsoren", table: "Unterstuetzungen", nullable: true); migrationBuilder.CreateTable( name: "Kategorien", schema: "Sponsoren", columns: table => new { Id = table.Column<Guid>(nullable: false), Code = table.Column<string>(maxLength: 15, nullable: true), Name = table.Column<string>(maxLength: 100, nullable: true), Rang = table.Column<int>(nullable: false), Beschreibung = table.Column<string>(maxLength: 1000, nullable: true) }, constraints: table => { table.PrimaryKey("PK_Kategorien", x => x.Id); }); migrationBuilder.CreateIndex( name: "IX_Unterstuetzungen_KategorieId", schema: "Sponsoren", table: "Unterstuetzungen", column: "KategorieId"); migrationBuilder.AddForeignKey( name: "FK_Unterstuetzungen_Kategorien_KategorieId", schema: "Sponsoren", table: "Unterstuetzungen", column: "KategorieId", principalSchema: "Sponsoren", principalTable: "Kategorien", principalColumn: "Id", onDelete: ReferentialAction.Restrict); }
Diese Migration führt zu Datenverlust, da die bestehende Tabelle gelöscht wird und eine neue angelegt. Die Daten sollen erhalten bleiben.
Aktion
Die erstellte Migration lässt sich anpassen. Dazu wird der generierte Code entfernt und durch die Rename-Methode für Tabellen und Spalten ersetzt.
protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.RenameTable("Sponsorkategorien", "Sponsoren", "Kategorien", "Sponsoren"); migrationBuilder.RenameColumn("SponsorkategorieId", "Unterstuetzungen", "KategorieId", "Sponsoren"); }
Resultat
Beim Ausführen der Migration wird eine Umbenennung der Tabelle und der Fremdschlüssel-Spalte durchgeführt und so ein Datenverlust bzw. eine aufwendige Datenmigrationen vermieden.