1. ホーム
  2. c#

[解決済み】Entity Framework Coreがユニーク制約をコードファーストで追加する

2022-04-02 16:25:48

質問

属性を使用してフィールドに一意制約を追加する方法が見つかりません。

public class User
{
    [Required]
    public int Id { get; set; }

    [Required]
    // [Index("IX_FirstAndSecond", 2, IsUnique = true)] not supported by core
    public string Email { get; set; }

    [Required]
    public string Password { get; set; }
}

これらのパッケージを使用しています。

 "Microsoft.EntityFrameworkCore": "1.0.1",
 "Microsoft.EntityFrameworkCore.SqlServer": "1.0.1",
 "Microsoft.EntityFrameworkCore.SqlServer.Design": "1.0.1",
 "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",

解決方法は?

EF core では、データアノテーションを使用してインデックスを作成することはできませんが、Fluent API を使用してインデックスを作成することができます。

このように {Db}Context.cs :

protected override void OnModelCreating(ModelBuilder builder)
{
    builder.Entity<User>()
        .HasIndex(u => u.Email)
        .IsUnique();
}

...または、buildActionでオーバーロードを使用している場合。

protected override void OnModelCreating(ModelBuilder builder)
{
    builder.Entity<User>(entity => {
        entity.HasIndex(e => e.Email).IsUnique();
    });
}

詳しくはこちらでどうぞ : インデックス