列上的 DataAnnotation [Index(IsUnique = true)] 会引发错误属性“Index”在此声明类型上无效

GAC*_*GAC 6 c# data-annotations ef-code-first entity-framework-core

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

CS0592 - 属性“索引”在此声明类型上无效。它仅对“类”声明有效

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

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

    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

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

请教我如何实现这一目标?

Iva*_*oev 16

嗯,Index属性是相当于 Fluent API 的数据注释HasIndex,与 API 类似,旨在应用于实体(类)级别,按顺序提供构成索引的属性,以及索引名称等其他信息,是否独特等等。

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

[Index(nameof(Holiday.Date), IsUnique = true)]
public class Holiday
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

对应下面的流畅配置

modelBuilder.Entity<Holiday>()
    .HasIndex(e => e.Date)
    .IsUnique();
Run Code Online (Sandbox Code Playgroud)

实际上, EF Core 官方文档的索引部分中的示例对此进行了很好的解释。