Как убрать уникальность индекса в 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 шт):
Просто переопределить нужное поле не помогло. Нужно было в 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) в начале метода. Без этого часть настроек не переопределялась.