【发布时间】:2018-10-08 17:08:06
【问题描述】:
我有一个跟踪记录附件的类。每个 Record 可以有多个 RecordAttachment,但要求每个 Record 只能有一个 RecordAttachment,标记为IsPrimary。
public class RecordAttachment
{
public int Id { get; set; }
public int RecordId { get; set; }
public string Details { get; set; }
public bool IsPrimary { get; set; }
public Record Record { get; set; }
}
我不能只使用.HasIndex(e => new { e.RecordId, e.IsPrimary }).IsUnique(true),因为每个记录可以有多个false 值。
基本上我需要对RecordId 和IsPrimary == true 进行唯一约束,尽管这不起作用:
entity.HasIndex(e => new { e.RecordId, IsPrimary = (e.IsPrimary == true) }).IsUnique(true)
编辑: 查看这样的答案:Unique Constraint for Bit Column Allowing Only 1 True (1) Value 似乎可以直接使用 SQL 创建约束,但它不会反映在我的模型中。
【问题讨论】:
-
听起来
Record应该有一个主要的RecordAttachment和许多非主要的RecordAttachments,而不是有IsPrimary列。所以基本上是一对一的关系,然后是一对多的关系。 -
另一种选择是将
IsPrimary替换为整数列,其中 1 表示主要值,您只需将所有其他值设置为唯一值。 -
@juharr 如果无法做到这一点,这将是一个选项,将
PrimaryAttachmentId添加到Record并单独处理。
标签: c# sql-server entity-framework-core