Entity Framework Coreでクラスター化・非クラスター化インデックスを設定する方法
2022-11-08
こんにちは、あおいです。
NASDAQちゃん、最近メンヘラ気味ですね。今は病み期ピークって感じですね。
さて、現在はドメイン駆動開発の手法でEntity Framework Coreを使ってインフラ層の実装をしています。テーブル定義でインデックスを設定する際に、FluentAPIを使ってクラスター化・非クラスタ-化インデックスを設定しようとしたんですが、若干詰まってしまったことがありました。
そこで、今回はEntity Framework Coreでクラスター化・非クラスター化インデックスを設定する方法を備忘録として記事に残します。
以下のUserクラスを例として、クラスター化・非クラスター化インデックスを設定していきます。
public class User
{
public int UserId { get; set; }
public string LastName { get; set; }
public string FirstName { get; set; }
public int Age { get; set; }
}
クラスター化インデックスの場合、FluentAPIで以下のように設定します。
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<User>(entity =>
{
// クラスター化インデックスの設定
entity.HasKey(user => user.UserId)
.IsClustered(true)
.HasName("PK_Users");
});
}
非クラスター化インデックスの場合、FluentAPIで以下のように設定します。
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<User>(entity =>
{
// 非クラスター化インデックスの設定
entity.HasIndex(user => new { user.LastName, user.FirstName }) ※複合インデックスキーの場合
.IsClustered(false)
.HasDatabaseName("IDX_Users_LastName_FirstName");
});
}
書き方が微妙に違うの厄介ですね、、、