簡體   English   中英

如何使用 EF Core fluent api 創建多個索引?

[英]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 AnnotationFluent 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM