[英]How to create more than one index using EF Core fluent api?
奇怪的是,我在任何地方都找不到任何例子或提及此事。 我想使用 fluent 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;
}
在Entity Framework 6.x
您可以使用Data Annotation
和Fluent API
創建索引,但根據EF Core Indexes文檔,在EF Core
,到目前為止,您只能使用Fluent API
創建索引。 因此,您正在做的是在EF Core
中執行此操作的適當方法。
此外,您可以做的一件事是將實體配置與DbContext
,如下所示:
public class FooConfiguration : IEntityTypeConfiguration<Foo>
{
public void Configure(EntityTypeBuilder<Foo> builder)
{
...
builder.HasIndex(h => h.Column1).IsUnique();
builder.HasIndex(h => h.Column2).IsUnique();
..
}
}
然后在OnModelCreating
方法中應用配置如下:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.ApplyConfiguration(new FooConfiguration()); //<-- add here
}
您可以使用 Fluent Api 創建多個索引
Add multiple columns index:
modelBuilder.Entity<MyEntity>().HasIndex(p => new {p.Prop1, p.Prop2});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.