【问题标题】:Creating a multiple column unique index that is NOT filtered [duplicate]创建未过滤的多列唯一索引[重复]
【发布时间】:2018-06-19 13:01:23
【问题描述】:

如果我有这样的定义:

...  
[Required]public string Name {get; set;}  
public Guid? DeletionMarker {get;set;}  
...  

我创建了一个这样的唯一索引:

...  
....HasIndex(r => new { r.Name, r.DeletionMarker }).IsUnique();  
...

我在迁移中得到这个代码:

migrationBuilder.CreateIndex(
                name: "whatever",
                table: "whatever",
                columns: new[] { "Name", "DeletionMarker" },
                unique: true,
                filter: "[DeletionMarker] IS NOT NULL");

但在我的情况下,我不想应用过滤器(当然,当两行中的 DeletionMarker 均为 NULL 时,我不希望插入相同的名称两次)。
我知道我可以手动进入并更改生成的迁移,但如果可能的话,我希望有一种“更清洁”的方式...... (我使用的是 SQL Server,只是为了提供上下文)

【问题讨论】:

  • 感谢您的指出:我可以保证我进行了所有可能的 google 搜索,而这个问题从未出现过! :-(

标签: entity-framework ef-core-2.0


【解决方案1】:

只是为了帮助跌倒在这里的人:
我不知道,我刚刚发现,我可以使用这个进一步的调用来“塑造”索引,这样它就变成了(在我的情况和需要中):

...  
....HasIndex(r => new { r.Name, r.DeletionMarker }).IsUnique().HasFilter(null);  
...

并且不再生成过滤器。有趣的是,传递一个空字符串 (HasFilter("")) 在迁移的生成过程中会出错。
所以问题解决了! :-)

【讨论】:

  • 如何考虑添加条件过滤器而不覆盖 EF Core 过滤器?我想检查唯一索引中的另一列(软删除列),但不想删除它创建的默认过滤器。怎么办?
猜你喜欢
  • 1970-01-01
  • 2010-12-07
  • 2015-03-22
  • 2017-02-28
  • 1970-01-01
  • 1970-01-01
  • 2021-06-22
  • 1970-01-01
  • 2014-07-19
相关资源
最近更新 更多