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

时间:2016-11-18 00:45:37

标签: 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,他将覆盖这种情况并生成正确的迁移?

1 个答案:

答案 0 :(得分:2)

目前我修改了迁移并在更改列之前删除了索引,并在操作后手动恢复它。

它完成了这项工作。

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