我首先使用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
}