c# - 如何使用 EF Core fluent api 创建多个索引?
问题描述
奇怪的是,我在任何地方都找不到任何例子或提及这一点。我想使用流利的 api 在我的两个列上设置索引(不是复合索引,只是两个单独的索引)。
例如,我想知道是否可以执行以下操作:
modelBuilder.Entity<T>
.HasIndex(h => h.Column1)
.HasIndex(h => h.Column2);
但是,从外观上看,不可能像这样链接索引。目前我正在做的是分别设置它们,例如:
modelBuilder.Entity<T>
.HasIndex(h => h.Column1)
modelBuilder.Entity<T>
.HasIndex(h => h.Column2)
有一个更好的方法吗?
解决方案
HasIndex() 返回一种 IndexBuilder,它允许您调用诸如 .IsUnique() 或 .HasName() 之类的东西。
有一个更好的方法吗?
取决于您是否认为这更好,以及您是否真的想流利。
要继续使用流畅的样式添加索引,您需要返回到 EntityTypeBuilder。如果你真的想要,你可以使用扩展方法。
modelBuilder.Entity<T>
.AddIndex(h => h.Column1)
.AddIndex(h => h.Column2);
public static EntityTypeBuilder<TEntity> AddIndex<TEntity>(this EntityTypeBuilder<TEntity> builder, Expression<Func<TEntity, object>> indexExpression) where TEntity : class
{
builder.HasIndex(indexExpression);
return builder;
}
或者
builder.Entity<T>()
.AddIndex(indexBuilder => indexBuilder.HasIndex(h => h.Column1))
.AddIndex(indexBuilder => indexBuilder.HasIndex(h => h.Column2).IsUnique());
public static EntityTypeBuilder<TEntity> AddIndex<TEntity>(this EntityTypeBuilder<TEntity> builder, Action<EntityTypeBuilder<TEntity>> action) where TEntity : class
{
action(builder);
return builder;
}
推荐阅读
- ruby-on-rails - 如何将 id 添加到 Friendly_id slug?
- python - 在 Django 中的表单中设置初始值
- javascript - 使用 Google Apps 脚本,我们可以在有人将数据输入 Google 电子表格后立即在 HTML 页面中显示该数据吗?
- firebase - Flutter 中的“未找到匹配的客户端”
- java - java.lang.NoClassDefFoundError: javax/net/ssl/HostnameVerifier
- c++ - C ++中数组中的随机字符串
- flutter - 为什么兄弟应用交叉 mainAxisAlignment?
- web-services - ColdFusion 2021 返回“对象不是声明类的实例”
- reactjs - React 从一个孩子更新父母状态并将更新后的值传递给新孩子
- formik - 使用 Yup 异步测试时 Formik 显示错误消息