问题描述
这是我第一次探索 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; }
}
我的目标是使 Date
列唯一......我认为在列上使用 [Index(IsUnique = true)]
是使其独一无二的正确方法......但它不允许我使用列上的索引属性,仅在类上...
请教我如何做到这一点? ???
解决方法
好吧,Index
属性是 HasIndex
fluent API 的数据注释,与 API 类似,旨在应用于实体(类)级别,提供属性组成索引的顺序,加上其他信息,如索引名称,是否唯一等。
所以在你的情况下你需要这样的东西
[Index(nameof(Holiday.Date),IsUnique = true)]
public class Holiday
{
// ...
}
对应下面的fluent配置
modelBuilder.Entity<Holiday>()
.HasIndex(e => e.Date)
.IsUnique();
实际上,EF Core 官方文档的 Indexes 部分中的示例很好地解释了所有这些。