Ciao, ho riscontrato un problema nel tentativo di eseguire migrazioni di database quando si aggiungono nuovi modelli o si modificano quelli vecchi. Sto usando EntityFrameworkCore. Il problema è che ogni nuova migrazione contiene il codice dal metodo Su di quello precedente.
/ * migrationBuilder.DropIndex (nome: "UserNameIndex", tabella: "AspNetUsers");
migrationBuilder.DropIndex(
name: "IX_AspNetUserRoles_UserId",
table: "AspNetUserRoles");
migrationBuilder.DropIndex(
name: "RoleNameIndex",
table: "AspNetRoles");
migrationBuilder.AddColumn<DateTime>(
name: "Birthdate",
table: "AspNetUsers",
nullable: false,
defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified));
migrationBuilder.AddColumn<string>(
name: "FirstName",
table: "AspNetUsers",
nullable: true);
migrationBuilder.AddColumn<string>(
name: "LastName",
table: "AspNetUsers",
nullable: true);
*/
migrationBuilder.CreateTable(
name: "Articles",
columns: table => new
{
Id = table.Column<int>(nullable: false)
.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
AuthorId = table.Column<string>(nullable: true),
Content = table.Column<string>(maxLength: 25000, nullable: false),
PublishDate = table.Column<DateTime>(nullable: false),
Title = table.Column<string>(maxLength: 150, nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Articles", x => x.Id);
table.ForeignKey(
name: "FK_Articles_AspNetUsers_AuthorId",
column: x => x.AuthorId,
principalTable: "AspNetUsers",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
});
Qui sto cercando di migrare un nuovo articolo di modello al database, ma il metodo contiene alcune cose della migrazione precedente e quando provo ad aggiornare il database ottengo il seguente errore: "Non posso rilasciare l'indice 'AspNetUserRoles.IX_AspNetUserRoles_UserId', perché non esiste o non hai il permesso. " Se commento il codice della migrazione precedente e lasciamo i dati per il modello appropriato, la migrazione viene eseguita correttamente. Ma poi aggiungo un nuovo modello "Supplemento" e ottengo la stessa cosa con la migrazione dell'articolo aggiunta nel metodo Up:
/ * migrationBuilder.DropIndex (nome: "UserNameIndex", tabella: "AspNetUsers");
migrationBuilder.DropIndex(
name: "IX_AspNetUserRoles_UserId",
table: "AspNetUserRoles");
migrationBuilder.DropIndex(
name: "RoleNameIndex",
table: "AspNetRoles");
migrationBuilder.AddColumn<DateTime>(
name: "Birthdate",
table: "AspNetUsers",
nullable: false,
defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified));
migrationBuilder.AddColumn<string>(
name: "FirstName",
table: "AspNetUsers",
nullable: true);
migrationBuilder.AddColumn<string>(
name: "LastName",
table: "AspNetUsers",
nullable: true);
*/
migrationBuilder.CreateTable(
name: "Articles",
columns: table => new
{
Id = table.Column<int>(nullable: false)
.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
AuthorId = table.Column<string>(nullable: true),
Content = table.Column<string>(maxLength: 25000, nullable: false),
PublishDate = table.Column<DateTime>(nullable: false),
Title = table.Column<string>(maxLength: 150, nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Articles", x => x.Id);
table.ForeignKey(
name: "FK_Articles_AspNetUsers_AuthorId",
column: x => x.AuthorId,
principalTable: "AspNetUsers",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
});
migrationBuilder.CreateTable(
name: "Supplements",
columns: table => new
{
Id = table.Column<int>(nullable: false)
.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
Description = table.Column<string>(nullable: true),
Name = table.Column<string>(nullable: true),
Price = table.Column<decimal>(nullable: false),
Quantity = table.Column<int>(nullable: false),
SupplementType = table.Column<int>(nullable: false),
inStock = table.Column<bool>(nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Supplements", x => x.Id);
});
Come posso risolvere questo?
Un'altra alternativa è assicurarsi che i mapping siano corretti e cancellare semplicemente le funzioni su / giù per avere uno stato pulito: