Первая миграция кода с использованием Fluent API .HasIndex (). HasName () не работает - PullRequest
0 голосов
/ 02 мая 2019

Я использую 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 и предоставляется правильное имя.

1 Ответ

0 голосов
/ 03 мая 2019

Согласно этому сообщению, это ошибка в Oracle.ManagedDataAccess.EntityFramework.Кроме того, похоже, что эта ошибка не была исправлена, так как я использую последнюю версию этого пакета: 18.3.0.

Oracle.ManagedDataAccess.EntityFramework 12.2.1100 Имена / миграции индекса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...