小编典典

使用流畅的 API 设置唯一约束?

all

我正在尝试使用 Code First 和EntityTypeConfiguration使用流利的 API 构建一个 EF
实体。创建主键很容易,但使用唯一约束并非如此。我看到旧帖子建议为此执行本机 SQL 命令,但这似乎违背了目的。EF6 有可能吗?


阅读 111

收藏
2022-07-17

共1个答案

小编典典

EF6.2 上 ,您可以使用HasIndex()fluent API 添加索引以进行迁移。

https://github.com/aspnet/EntityFramework6/issues/274

例子

modelBuilder
    .Entity<User>()
    .HasIndex(u => u.Email)
        .IsUnique();

EF6.1 开始,您可以使用IndexAnnotation()在 fluent API 中添加用于迁移的索引。

http://msdn.microsoft.com/en-
us/data/jj591617.aspx#PropertyIndex

您必须添加对以下内容的引用:

using System.Data.Entity.Infrastructure.Annotations;

基本示例

User.FirstName这是一个简单的用法,在属性上添加索引

modelBuilder 
    .Entity<User>() 
    .Property(t => t.FirstName) 
    .HasColumnAnnotation(IndexAnnotation.AnnotationName, new IndexAnnotation(new IndexAttribute()));

实际例子:

这是一个更现实的例子。它在多个属性上添加
唯一索引User.FirstName:和User.LastName,索引名称为“IX_FirstNameLastName”

modelBuilder 
    .Entity<User>() 
    .Property(t => t.FirstName) 
    .IsRequired()
    .HasMaxLength(60)
    .HasColumnAnnotation(
        IndexAnnotation.AnnotationName, 
        new IndexAnnotation(
            new IndexAttribute("IX_FirstNameLastName", 1) { IsUnique = true }));

modelBuilder 
    .Entity<User>() 
    .Property(t => t.LastName) 
    .IsRequired()
    .HasMaxLength(60)
    .HasColumnAnnotation(
        IndexAnnotation.AnnotationName, 
        new IndexAnnotation(
            new IndexAttribute("IX_FirstNameLastName", 2) { IsUnique = true }));
2022-07-17