C# 在列上创建唯一约束
我有这个型号C# 在列上创建唯一约束,c#,asp.net-core,entity-framework-core,C#,Asp.net Core,Entity Framework Core,我有这个型号 public class Record { public int Id {get;set;} public int Client {get;set;} public bool IsActive {get;set;} } 我想为IsActive列创建一个约束 每个客户端只能有一条记录处于活动状态 如何在模型上实现这一点?您需要为您的列创建一个过滤索引ef core have功能,您可以在dbcontext中使用重写OnModelCreating方法对其进行配
public class Record
{
public int Id {get;set;}
public int Client {get;set;}
public bool IsActive {get;set;}
}
我想为IsActive列创建一个约束
每个客户端只能有一条记录处于活动状态
如何在模型上实现这一点?您需要为您的列创建一个过滤索引ef core have功能,您可以在dbcontext中使用重写
OnModelCreating
方法对其进行配置
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Record>(entity =>
{
entity.HasIndex(e => e.Client)
.HasName("Record_Filtered_Index")
.HasFilter("([IsActive]=(1))");
});
}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
modelBuilder.Entity(Entity=>
{
entity.HasIndex(e=>e.Client)
.HasName(“记录过滤索引”)
.HasFilter(([IsActive]=(1))”;
});
}
您可以通过在Client
和IsActive
列上创建唯一索引来实现这一点。基本上,这意味着如果有一个客户机在isActive上为true,它就不能再次插入它。但这对false来说不是也一样吗?因为前面的都是假的。更新完客户机记录后,将其设置为false,以便客户机下次登录时可以开始使用新记录。您需要查看过滤后的索引。EF在这里不能为您提供一种简单的方法,但您可以查看类似于创建唯一的非聚集索引。。。其中([IsActive]=(1))
我明白了,谢谢,很遗憾,这还不受支持。