如何使用数据注释在EF 7 Code First中指定唯一键

Rub*_*rez 12 entity-framework code-first data-annotations entity-framework-core

您可以使用Fluent Api指定唯一键:

public class MyContext : DbContext
{
    public DbSet<User> Users { get; set; }

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

public class User
{
    public int UserId { get; set; }
    public string Nickname { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

但是你可以用数据注释来做吗?

编辑

方法更改EF7 Beta 8:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<User>()
        .Index(u => u.Nickname)
        .Unique();
}
Run Code Online (Sandbox Code Playgroud)

oct*_*ccl 8

我担心Index在EF 7中仍然不支持创建使用数据注释.请检查此链接.

我也尝试在上一版本中找到与该主题相关的一些信息,但我找不到任何内容.

EF 7 beta 8发行说明

EF 7 RC1发行说明

我现在发现一个帖子从这样说的EF开发商之一(divega):

在EF7中,我们支持使用流畅的API而不是属性来定义索引,至少还没有.您可能引用的IndexAttribute是我们在某些时候添加到EF 6.x包中但从未真正成为标准DataAnnotation的东西.

我们不希望从EF6中复制原始属性,因为我们想要更改其中的一些内容.此外,直接在DataAnnotations中使用它可能比将其添加到EF7包更有意义.我应该提一下,我们不太可能在EF7 RTM时间帧中添加IndexAttribute.

更新1

显然,这是一项不会添加到EF Core的功能,至少目前是这样.

从EF Core文档:

无法使用数据批注配置索引.

但你可以使用Fluent Api来做到这一点:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Blog>()
        .HasIndex(b => b.Url)
        .HasName("Index_Url");
}
Run Code Online (Sandbox Code Playgroud)