是否可以使用Entity Framework Code First设置唯一约束?

时间:2014-11-10 06:10:18

标签: asp.net-mvc entity-framework entity-framework-5 entity-framework-6

我想在表格中强制执行唯一约束。我正在使用Entity Framework Code-First。

是否可以使用EF 6添加唯一约束,因为我相信早期版本是不可能的。

3 个答案:

答案 0 :(得分:48)

似乎计划与版本6一起发布的unique constraint feature被推送到6.1。

使用EF 6.1,您可以使用Index属性定义约束,如下所示:

[Index("IX_FirstAndSecond", 1, IsUnique = true)]
public int FirstColumn { get; set; }

[Index("IX_FirstAndSecond", 2, IsUnique = true)]
public int SecondColumn { get; set; }

OR

您可以使用Fluent API,如MSDN

中所示

答案 1 :(得分:16)

假设您要在仅一个属性上添加唯一约束,您可以执行以下操作,从EF6.1开始

[Index(IsUnique = true)]
public string Username { get; set; }

如果您有多个字段与同一索引相关,那么您将使用:

  

多列索引

     

跨越多列的索引是   通过在多个索引注释中使用相同的名称来指定   给出表。创建多列索引时,需要指定   索引中列的顺序。例如,以下代码   在Rating和BlogId上创建一个多列索引   IX_BlogAndRating。 BlogId是索引和评级中的第一列   是第二个。

public class Post 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 
    public string Content { get; set; } 
    [Index("IX_BlogIdAndRating", 2)] 
    public int Rating { get; set; } 
    [Index("IX_BlogIdAndRating", 1)] 
    public int BlogId { get; set; } 
}

有关详细信息,请参阅this link

答案 2 :(得分:1)

如果要避免使用注释,请在配置类中使用它来定义它:

public class YourTableConfig : EntityTypeConfiguration<YourTableEntity>
{
  public YourTableConfig()
  {
    ToTable("YourTableDbName");

    HasKey(u => u.Id);

    Property(c => c.CompanyId).HasColumnType("nvarchar").HasMaxLength(9).IsRequired();

    HasIndex(x => x.CompanyId).IsUnique(); // This sets the unique index
  }
}