微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

这是我第一次探索 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 部分中的示例很好地解释了所有这些。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。