【问题标题】:Create unique constraint on column在列上创建唯一约束
【发布时间】:2019-06-24 07:54:39
【问题描述】:

我有这个模型

public class Record
{
    public int Id {get;set;}
    public int Client {get;set;}
    public bool IsActive {get;set;}
}

我想为 IsActive 列创建一个约束。

每个客户端只能激活 1 条记录。

如何在模型上实现这一点?

【问题讨论】:

  • 您可以通过在 ClientIsActive 列上创建唯一索引来实现此目的
  • 哦,我明白了。基本上,这意味着如果在 isActive 上有一个客户端为 true,它就不能再次插入它。但这不是对 false 做同样的事情吗?因为前面的都是假的。客户端记录完成更新后,将其设置为 false,以便客户端下次登录时可以开始新记录
  • 您需要查看过滤后的索引。 EF这里不能给你提供简单的方法,但是你可以看看this question
  • 类似CREATE UNIQUE NONCLUSTERED INDEX ... WHERE ([IsActive]=(1))
  • 我明白了,很遗憾,这还不支持。

标签: c# asp.net-core entity-framework-core


【解决方案1】:

您需要为您的列创建过滤索引,ef 核心具有filter index 功能,您可以在您的 dbcontext 中配置它并覆盖OnModelCreating 方法。

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
   modelBuilder.Entity<Record>(entity =>
   {
       entity.HasIndex(e => e.Client)
        .HasName("Record_Filtered_Index")
        .HasFilter("([IsActive]=(1))");
   });
}

【讨论】:

    猜你喜欢
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 2016-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多