c# - 带有条件的 EF Core 迁移约束
问题描述
我有以下课程:
public class VerizonRequest
{
public VerizonRequest()
{
CreatedDate = DateTime.UtcNow;
}
public int DeviceId { get; set; }
public virtual Device Device { get; set; }
public string AccountName { get; set; }
public string RequestId { get; set; }
public DateTime CreatedDate { get; set; }
public DateTime? ResultDate { get; set; }
public VerizonRequestStatus Status { get; set; } = VerizonRequestStatus.Pending;
public VerizonRequestType RequestType { get; set; }
public string Comment { get; set; }
}
和地图类:
public class VerizonRequestMap : IEntityTypeConfiguration<VerizonRequest>
{
public void Configure(EntityTypeBuilder<VerizonRequest> builder)
{
builder.ToTable(nameof(VerizonRequest));
builder.HasKey(d => d.RequestId);
builder.HasOne(d => d.Device)
.WithMany(d => d.VerizonRequests)
.HasForeignKey(d => d.DeviceId);
}
}
我想创建一个约束,如果已经有一条具有相同 DeviceId 和 Status = 'Pending' 的记录,它将无法为相同的 DeviceId 添加一条记录
所以,它应该是这样的:
builder.HasIndex(d => new { d.DeviceId, d.Status });
但仅当 Status = 'Pending' 时(对于 Status != 'Pending',与 DeviceId + Status 的对可以不止一个,但对于 'Pending' 只有一个)
可能吗?
解决方案
感谢@DavidG,HasFilter
帮助我:
builder.HasIndex(d => new { d.DeviceId, d.Status }).HasFilter("[Status] = 1");
推荐阅读
- python-3.x - 我无法在嵌套循环中打印出来。我试图打印只有 2 个阶乘但无法打印出来的数字
- c - scanf ("%s", string) 的漏洞
- excel - 删除#NULL!使用 Excel 宏
- bash - Bash - 解析ini文件,通过值查找节名
- android - Android Studio 编译器无法编译我的 AdsClass
- javascript - 如何在订阅中返回 Observable?
- python-3.x - Python3用反射迭代调用类的成员
- javascript - 在 React 中使用对象构造函数?
- c++ - 如何指向具有函数重载的函数?
- ruby-on-rails - rspec:在 Chrome 上重新启动浏览器无法访问异常