列上的 DataAnnotation [Index(IsUnique = true)] 抛出错误属性 'Index' 在此声明类型上无效

DataAnnotation [Index(IsUnique = true)] on a column throws error Attribute 'Index' is not valid on this declaration type

这是我第一次探索 DataAnnotations(我希望能流畅地使用它)...我不明白为什么以下代码会引发编译时错误:

CS0592 - 属性 'Index' 在此声明类型上无效。仅在 'class' 声明

时有效
public class Holiday
{
    [Key]
    public int Id { get; set; }

    [Required]
    [Index(IsUnique = true)]
    public DateTime? Date { get; set; }

    public string Name { get; set; }
}

我的目标是使 Date 列独一无二...我认为在列上使用 [Index(IsUnique = true)] 是使其独一无二的正确方法...但它不允许我在列上使用 Index 属性,仅在 类...

请教我如何实现这个?

好吧,Index attribute is the data annotation equivalent of HasIndex 流畅 API,与 API 相似,旨在应用于实体 (class) 级别,提供 构成索引的属性,依次,加上索引名称,是否唯一等其他信息

所以在你的情况下你需要这样的东西

[Index(nameof(Holiday.Date), IsUnique = true)]
public class Holiday
{
    // ...
}

对应如下流利配置

modelBuilder.Entity<Holiday>()
    .HasIndex(e => e.Date)
    .IsUnique();

实际上,官方 EF Core 文档的 Indexes 部分中的示例很好地解释了所有这些内容。