Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 如何在EF 7代码中首先使用数据注释指定唯一键_Entity Framework_Data Annotations_Code First_Entity Framework Core - Fatal编程技术网

Entity framework 如何在EF 7代码中首先使用数据注释指定唯一键

Entity framework 如何在EF 7代码中首先使用数据注释指定唯一键,entity-framework,data-annotations,code-first,entity-framework-core,Entity Framework,Data Annotations,Code First,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

您可以使用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; }
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Blog>()
        .HasIndex(b => b.Url)
        .HasName("Index_Url");
}
公共类MyContext:DbContext
{
公共数据库集用户{get;set;}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
modelBuilder.Entity()
.HasIndex(u=>u.昵称)
.IsUnique();
}
}
公共类用户
{
public int UserId{get;set;}
公共字符串昵称{get;set;}
}
但是你能用数据注释来做吗

编辑 EF7 Beta 8中的方法更改:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<User>()
        .Index(u => u.Nickname)
        .Unique();
}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
modelBuilder.Entity()
.Index(u=>u.昵称)
.Unique();
}

恐怕EF7中仍然不支持使用数据注释创建
索引。看看这个

我还试图在上一版中找到一些与该主题相关的信息,但什么也找不到

我现在发现一位EF开发者(divega)说:

在EF7中,我们支持使用fluent API定义索引,但不支持 属性,至少还没有。您可能正在使用的索引属性 提到的是我们在某个时候添加到EF 6.x包中的东西 但从未真正成为标准的数据注释

我们不想按原样从EF6复制原始属性,因为 其中有一些东西我们想改变。也, 将其直接放在DataAnnotations中可能更有意义 而不是将其添加到EF7包中。 不过,我必须指出,我们极不可能增加 EF7 RTM时间框架中的索引属性

更新1 显然,这是一个功能,将不会被添加到EF核心,至少现在

发件人:

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

但您可以使用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; }
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Blog>()
        .HasIndex(b => b.Url)
        .HasName("Index_Url");
}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
modelBuilder.Entity()
.HasIndex(b=>b.Url)
.HasName(“索引Url”);
}

在没有内置支持的情况下,您可以使用自己的自定义属性来注释模型属性,并在
OnModelCreating()中应用:

然后在模型类中,只需添加属性以创建辅助索引:

public class User
{
    public int UserId { get; set; }
    [Index]
    public string Nickname { get; set; }
}

@最后,我更新了我的问题,恐怕还没有改变,所以如果你需要定义一个索引,你将需要使用fluentapi