我正在使用EF 6.2。这是针对Oracle 12.1.0.2数据库的。
我可以使用以下代码创建索引;但是,当我运行Update-Database并检查索引时,我看到我提供的名称未使用。而是,该索引似乎使用默认命名约定“ IX_TableName_ColumnName_GUID”来命名。当我也尝试撤消这些更改时,这也会成为问题,因为此处提供的索引名称也未使用。
我也尝试过在数据注释中指定索引(也显示在下面的代码中)。
此外,我尝试将代码的两个部分都保留在原处,但都无济于事。我仍然最终得到的索引没有命名为我想要的。
数据注释
[Column(TypeName = "int")]
[Index("IXTest", 1)]
public Int32 PARENT_ID { get; set; }
[Column(TypeName = "int")]
[Index("IXTest", 2)]
public Int32 ACTION_ID { get; set; }
Fluent API
modelBuilder.Entity<PARENT_ACTION>()
.HasIndex(e => new { e.PARENT_ID, e.ACTION_ID })
.HasName("IXTest");
这是运行“ Add-Migration IXTest”后生成的方法
public override void Up()
{
CreateIndex("USER.PARENT_ACTION", new[] { "PARENT_ID", "ACTION_ID" }, name: "IXTest");
}
public override void Down()
{
DropIndex("USER.PARENT_ACTION", "IXTest");
}
这是使用“ Update-Database -Verbose”命令时记录的sql
begin
execute immediate
'create index "USER"."IX_PARENT_ACTION_P_1329803955" on "USER"."PARENT_ACTION" ("PARENT_ID", "ACTION_ID")';
exception
when others then
if sqlcode <> -1408 then
raise;
end if;
end;
这是我针对先前的迁移以撤消索引更改时记录的sql
begin
execute immediate
'drop index "USER"."IX_PARENT_ACTION_"';
exception
when others then
if sqlcode <> -1418 then
raise;
end if;
end;
我希望使用Fluent API或数据注释,我指定的索引名称将在Update-Database命令中使用,尤其是因为调用了“ CreateIndex”方法并提供了正确的名称。
答案 0 :(得分:0)
根据这篇文章,这是Oracle.ManagedDataAccess.EntityFramework的错误。另外,似乎此错误尚未修复,因为我使用的是此软件包的最新版本:18.3.0。
Oracle.ManagedDataAccess.EntityFramework 12.2.1100 Index Names/Migrations