Entity framework 在实体框架核心中更改带有索引的列 版本
SQL引擎:MS SQL EF核心包版本:Entity framework 在实体框架核心中更改带有索引的列 版本,entity-framework,entity-framework-core,Entity Framework,Entity Framework Core,SQL引擎:MS SQL EF核心包版本: "Microsoft.EntityFrameworkCore": "1.0.1", "Microsoft.EntityFrameworkCore.SqlServer": "1.0.1", "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final" 问题 我已经更改了现有列,该列上有索引,并在前面创建了几个迁移: // ... other changes migrationBuilder
"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");
我已将其从可选更改为必需(不可为null)。
实体框架核心生成了这样的迁移:
// ... other changes
migrationBuilder.AlterColumn<Guid>(
name: "OrganisationToId",
table: "Interactions",
nullable: false);
/。。。其他变化
migrationBuilder.AlterColumn(
名称:“OrganizationToId”,
表:“互动”,
可为空: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");
//在更改列之前删除索引
migrationBuilder.DropIndex(名称:“IX_Interactions_OrganizationToId”,表:“Interactions”);
//真变柱
migrationBuilder.AlterColumn(
名称:“OrganizationToId”,
表:“互动”,
可为空:false);
//恢复索引
migrationBuilder.CreateIndex(
名称:“IX_Interactions_OrganizationToId”,
表:“互动”,
栏目:“组织ID”);
这在EFCore 1.1.0中已修复。见问题