具體實現可參考NetCoreKevin

一個基於NET8搭建DDD-微服務-現代化Saas企業級WebAPI前後端分離架構:前端Vue3、IDS4單點登錄、多級緩存、自動任務、分佈式、AI智能體、一庫多租户、日誌、授權和鑑權、CAP事件、SignalR、領域事件、MCP協議服務、IOC模塊化注入、Cors、Quartz自動任務、多短信、AI、AgentFramework、SemanticKernel集成、RAG檢索增強+Qdrant矢量數據庫、OCR識別、API多版本、單元測試、RabbitMQ

項目地址:github:https://github.com/junkai-li/NetCoreKevin

使用 HasIndex 方法指定字段

在實體類配置中通過 HasIndex 方法直接指定需要添加索引的字段。例如為 NameEmail 字段添加索引:

modelBuilder.Entity<User>()
    .HasIndex(u => new { u.Name, u.Email });

配置默認索引命名規則

通過 modelBuilder 的配置統一設置索引命名規則,避免手動命名。例如使用以下方式配置:

modelBuilder.Entity<User>()
    .HasIndex(u => u.Name)
    .HasDatabaseName("IX_Default_Name");

使用 Fluent API 批量添加索引

OnModelCreating 方法中通過循環或反射批量為特定字段添加索引。例如為所有字符串類型的屬性添加索引:

foreach (var entity in modelBuilder.Model.GetEntityTypes())
{
    foreach (var property in entity.GetProperties())
    {
        if (property.ClrType == typeof(string))
        {
            entity.AddIndex(property);
        }
    }
}

通過數據註解標記索引字段

直接在實體類的屬性上使用 [Index] 註解標記需要索引的字段。例如:

public class User
{
    [Index]
    public string Name { get; set; }
}

配置複合索引

為多個字段創建複合索引時,指定字段順序和排序方式。例如:

modelBuilder.Entity<User>()
    .HasIndex(u => new { u.LastName, u.FirstName })
    .IsDescending(false, true);

使用 Include 屬性包含非鍵字段

在索引中包含非鍵字段以提高查詢性能。例如:

modelBuilder.Entity<User>()
    .HasIndex(u => u.Id)
    .IncludeProperties(u => u.Name);

設置索引的篩選條件

為索引添加篩選條件以優化特定查詢場景。例如為活躍用户添加篩選索引:

modelBuilder.Entity<User>()
    .HasIndex(u => u.Name)
    .HasFilter("[IsActive] = 1");