考虑以下课程
public class Foo
{
[Key]
public int Id { get; set; }
[Required]
public virtual User User { get; set; }
[Required]
[MaxLength(20)]
public string Token { get; set; }
}
我需要将User和Token组合成表中的唯一约束。我认为这可以使用属性[Index(IsUnique = true)]
我通过首先将属性仅应用于Token属性然后仅应用于User属性来测试它。在Token属性上,我在添加重复记录时得到了预期的异常但是在User属性上我没有。
用户属性是用户表中的外键(在本例中为in),但此属性不强制执行唯一性。知道为什么吗?
答案 0 :(得分:0)
我通过反复试验偶然发现了答案:
我需要为User明确声明外键而不是让EF解决它。然后我可以将Index属性添加到外键属性。
所以不要试图这样做:
[Required]
[Index("UserToken", 1, IsUnique = true)]
public virtual User User { get; set; }
我必须这样做:
[Required]
[ForeignKey("UserId")]
public virtual User User { get; set; }
[Index("UserToken", 1, IsUnique = true)]
public int UserId { get; set; }