我想在表格中强制执行唯一约束。我正在使用Entity Framework Code-First。
是否可以使用EF 6添加唯一约束,因为我相信早期版本是不可能的。
答案 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
}
}