我想使用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"一部分。
答案 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创建