EF6.1多列的唯一约束

时间:2014-09-08 11:27:20

标签: entity-framework

考虑以下课程

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),但此属性不强制执行唯一性。知道为什么吗?

1 个答案:

答案 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; }