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

Posted

技术标签:

【中文标题】是否可以使用 Entity Framework Code First 设置唯一约束?【英文标题】:Is it possible to set a unique constraint using Entity Framework Code First? 【发布时间】:2015-01-06 09:39:48 【问题描述】:

我想在表中强制执行唯一约束并且我正在使用实体框架代码优先。

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

【问题讨论】:

看这个Q -> ***.com/questions/21573550/… 【参考方案1】:

看来计划与版本 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; 

您可以使用 MSDN 中所示的 Fluent API

【讨论】:

感谢您的更新,因此创建此唯一索引与创建唯一约束具有相同的效果 是的,它将为数据库中的列创建一个唯一索引。 在 EF7 - DNX 中似乎找不到它。 @Shimmy Indexes can not be created using data annotations 在 EF7 中。 为什么要以“IX_”开头?【参考方案2】:

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

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

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

多列索引

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

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。

【讨论】:

【参考方案3】:

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

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
  

【讨论】:

以上是关于是否可以使用 Entity Framework Code First 设置唯一约束?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 MS Entity Framework 中查询新添加的对象

是否可以在 Code First Entity Framework 中使用 JSON 文件作为后端存储?

我的项目中安装了哪个版本的Entity Framework?

Entity Framework 4 表值函数

是否有适用于 Entity Framework 5 的可靠分析器? [关闭]

C# Entity Framework 迁移,使 ID 自动递增