在EF Core Code First数据库中添加条件索引

时间:2018-10-16 06:59:43

标签: ef-code-first entity-framework-core

我首先使用Entity Framework Core Database。在许多表中,我都有“排序”列,其类型为“ 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
}

0 个答案:

没有答案