如何使用带有实体框架的Where子句创建唯一索引

时间:2017-06-14 16:31:20

标签: entity-framework ef-code-first

我想使用Entity Framework创建一个带有WHERE条件的UNIQUE INDEX。

public class Person {
    public string Name { get; set; }    

    public bool Expired { get; set; } 
}

条件是名称仅在"已过期时才是唯一的"是假的。

INDEX看起来像这样:

CREATE UNIQUE INDEX [IX_Person]
    ON Person(Name)
    WHERE [Expired] = 0;

有没有办法用代码优先编写这个唯一索引而不必在迁移中执行这个SQL?

我可以这样写:

[Index("IX_Expired", IsUnique = true)]
public bool Expired { get; set; } 

但是我找不到指定" WHERE"一部分。

2 个答案:

答案 0 :(得分:4)

万一有人来这里寻求在Entity Framework核心中执行此操作.... you can now do it

例如在您的MigrationContext中:

   builder.Entity<MyEntity>()
        .HasIndex(x => x.MyField)
        .HasFilter($"{nameof(MyEntity.MyField)} IS NOT NULL")
        .IsUnique();

答案 1 :(得分:3)

  

有没有办法用代码优先编写这个唯一索引而不必在迁移中执行这个SQL?

没有。 EF只能创建基本索引。

用于SQL Server的EG,过滤的索引,包含列的索引,分区索引,特定文件组的索引,具有行或页面压缩的索引,列存储索引,堆表,内存优化表等,只能使用TSQL创建