在Entity Framework Core中更改帶有索引的列

entity-framework entity-framework-core

SQL enginie:MS SQL。

EF Core軟件包版本:

"Microsoft.EntityFrameworkCore": "1.0.1",
"Microsoft.EntityFrameworkCore.SqlServer": "1.0.1",
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final"

問題

我已經更改了現有列,其上有索引,之前創建了一些遷移:

// ... other changes
migrationBuilder.CreateIndex(
    name: "IX_Interactions_OrganisationToId",
    table: "Interactions",
    column: "OrganisationToId");

我已將它從可選更改為必需(不可為空)。實體框架核心生成了這樣的遷移:

// ... other changes
migrationBuilder.AlterColumn<Guid>(
    name: "OrganisationToId",
    table: "Interactions",
    nullable: false);

但是你不能改變有索引的列。不幸的是,在將字段更改為非可空的情況下,EF Core不支持此功能。

重命名字段時 - 像魅力一樣工作,在重命名之前只需刪除索引並在更改後恢復它。


有沒有辦法配置EF Core,他將涵蓋這種情況並生成正確的遷移?

一般承認的答案

目前我已經修改了遷移並在更改列之前刪除了索引,並在操作後手動恢復它。

它完成了這項工作。

// 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");


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因