des*_*ien 2 entity-framework ef-code-first
我想使用实体框架创建具有WHERE条件的UNIQUE INDEX。
public class Person {
public string Name { get; set; }
public bool Expired { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
条件是,仅当“ Expired”为假时,名称才是唯一的。
INDEX看起来像这样:
CREATE UNIQUE INDEX [IX_Person]
ON Person(Name)
WHERE [Expired] = 0;
Run Code Online (Sandbox Code Playgroud)
是否有某种方法可以使用代码优先的方式编写此唯一索引,而不必在迁移中执行此SQL?
我可以这样写:
[Index("IX_Expired", IsUnique = true)]
public bool Expired { get; set; }
Run Code Online (Sandbox Code Playgroud)
但是我找不到指定“ WHERE”部分的方法。
是否有某种方法可以使用代码优先的方式编写此唯一索引,而不必在迁移中执行此SQL?
不可以。EF只能创建基本索引。
SQL Server的EG,筛选索引,具有包含列的索引,分区索引,特定文件组上的索引,具有行或页面压缩的索引,列存储索引,堆表,内存优化表等只能使用TSQL创建。
小智 5
如果有人来这里希望在 Entity Framework 核心中做到这一点......你现在可以做到!
例如在您的 MigrationContext 中:
builder.Entity<MyEntity>()
.HasIndex(x => x.MyField)
.HasFilter($"{nameof(MyEntity.MyField)} IS NOT NULL")
.IsUnique();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
568 次 |
| 最近记录: |