SQL enginie: MS SQL.
Versioni di pacchetti EF Core:
"Microsoft.EntityFrameworkCore": "1.0.1",
"Microsoft.EntityFrameworkCore.SqlServer": "1.0.1",
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final"
Ho modificato la colonna esistente, che con l'indice su di esso ha creato poche migrazioni in precedenza:
// ... other changes
migrationBuilder.CreateIndex(
name: "IX_Interactions_OrganisationToId",
table: "Interactions",
column: "OrganisationToId");
L'ho modificato da opzionale a obbligatorio (non annullabile). Entity Framework Core ha generato tale migrazione:
// ... other changes
migrationBuilder.AlterColumn<Guid>(
name: "OrganisationToId",
table: "Interactions",
nullable: false);
Ma non è possibile modificare la colonna che ha indice su di esso. Sfortunatamente EF Core non supporta questo in caso di modifica del campo a non nullable.
Quando si rinomina il campo, funziona come un incantesimo e prima di ridenominarlo semplicemente fa cadere l'indice e lo ripristina dopo la modifica.
C'è un modo per configurare EF Core che coprirà questo caso e genererà la migrazione corretta?
Al momento ho modificato la migrazione e rilasciato l'indice prima di modificare la colonna e ripristinarlo manualmente dopo l'operazione.
Ha fatto il lavoro.
// drop index before altering column
migrationBuilder.DropIndex(name: "IX_Interactions_OrganisationToId", table: "Interactions");
// actually altering column
migrationBuilder.AlterColumn<Guid>(
name: "OrganisationToId",
table: "Interactions",
nullable: false);
// restore index
migrationBuilder.CreateIndex(
name: "IX_Interactions_OrganisationToId",
table: "Interactions",
column: "OrganisationToId");