Entity framework 如何在EF 7代码中首先使用数据注释指定唯一键
您可以使用Fluent Api指定唯一密钥: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
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