Я использую 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; }
Свободный 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");
}
А вот sql, зарегистрированный при использовании команды «Update-Database -Verbose»
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 и предоставляется правильное имя.