Как убрать уникальность индекса в Entity Framework?

Столкнулся с проблемой в Identity. Для авторизации использую OpenIddict. В стандартном IdentityUser поле NormalizedUserName уникально:

b.HasIndex("NormalizedUserName")
    .IsUnique()
    .HasName("UserNameIndex")
    .HasFilter("[NormalizedUserName] IS NOT NULL");

Подскажите пожалуйста, как убрать уникальность с этого поля? (используя Fluent API или еще как-то, учитывая то, что нужное поле находится в классе библиотеки). У меня в проекте уникальность пользователя проверяется по дополнительному параметру (несколько подсайтов, пользователь может зарегистрироваться на каждом из них без пересечения с остальными).

Пробовал так, не помогло:

protected override void OnModelCreating(ModelBuilder builder)
{
    builder.Entity<PanelUser>()
        .HasIndex(u => u.NormalizedUserName)
        .HasName("UserNameIndex")
        .HasFilter("[NormalizedUserName] IS NOT NULL");

    base.OnModelCreating(builder);
}

Если ручками убрать Unique в классе миграции - все работает как мне надо. Но каждый раз переписывать миграцию не очень удобно.


Ответы (1 шт):

Автор решения: DJSvist

Просто переопределить нужное поле не помогло. Нужно было в OnModelCreating явно указать IsUnique(false), чтобы переписать конфигурацию из недр библиотек:

protected override void OnModelCreating(ModelBuilder builder)
{
    base.OnModelCreating(builder);

    builder.Entity<PanelUser>()
        .HasIndex(u => u.NormalizedUserName)
        .HasName("UserNameIndex")
        .HasFilter("[NormalizedUserName] IS NOT NULL")
        .IsUnique(false);
}

Помимо этого расположил base.OnModelCreating(builder) в начале метода. Без этого часть настроек не переопределялась.

→ Ссылка