Добавить условный индекс в базу данных EF Core Code First - PullRequest
0 голосов
/ 16 октября 2018

Сначала я использую базовую базу данных Entity Framework.Во многих таблицах у меня есть столбец «Сортировка», который имеет тип «smallint», значение по умолчанию «1000» и индекс.Вместо того, чтобы вручную настраивать этот столбец для каждой таблицы

protected override void OnModelCreating(ModelBuilder builder) {
// ...
builder.Entity<SCISupplier>(entity => {
    // entity.Property(e => e.DTCreate).HasDefaultValueSql("CURRENT_TIMESTAMP");
    entity.Property(e => e.IsHidden).HasDefaultValue(false);
    // entity.Property(e => e.Sort).HasDefaultValue(1000); // <-- THIS

    entity.HasIndex(e => e.IsHidden);
    entity.HasIndex(e => e.Sort); // <-- AND THIS
});
// ...
}

Я хочу сделать это для всех таблиц:

foreach (var property in builder.Model.GetEntityTypes()
    .SelectMany(t => t.GetProperties())
    .Where(p => p.ClrType == typeof(Int16) && p.Name == "Sort"
    )) {
    property.Relational().DefaultValueSql = "1000";
}

Это прекрасно работает, но как добавить индекс в этот столбец?Как то так (не работает):

foreach (var property in builder.Model.GetEntityTypes()
    .SelectMany(t => t.GetProperties())
    .Where(p => p.ClrType == typeof(Int16) && p.Name == "Sort"
    )) {
    property.Relational().DefaultValueSql = "1000";
    property.AddIndex(); // <-- THIS DOESN'T WORK
}
...