是否可以使用 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?