【发布时间】:2015-07-13 07:13:26
【问题描述】:
我有以下实体,它为我提供了一个自动递增的 PK、两列(或用 EF 行话“关系”)和一个布尔值。它按预期工作。
public class SomeEntity
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int SomeID { get; set; }
public virtual UserAttribute UserAttribute { get; set; }
public virtual User User { get; set; }
public bool Value { get; set; }
}
现在我想添加一个约束,以便 UserAttribute 和 User 的组合必须是唯一的。这代替了使它们成为复合主键。所以我添加了一些注释,它看起来像这样:
public class SomeEntity
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int SomeID { get; set; }
[Index("IX_MyTwoColumns", 1, IsUnique = true)]
public virtual UserAttribute UserAttribute { get; set; }
[Index("IX_MyTwoColumns", 2, IsUnique = true)]
public virtual User User { get; set; }
public bool Value { get; set; }
}
当我在 Management Studio 中查看索引时,我看不到 IX_MyTwoColumns。怀疑这与使用关系有关,我添加了两个虚拟列 foo 和 bar 并指定了一个唯一的多列索引:
public class SomeEntity
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int SomeID { get; set; }
[Index("IX_MyTwoColumns", 1, IsUnique = true)]
public virtual UserAttribute UserAttribute { get; set; }
[Index("IX_MyTwoColumns", 2, IsUnique = true)]
public virtual User User { get; set; }
[Index("IX_FooAndBar", 1, IsUnique = true)]
public int Foo { get; set; }
[Index("IX_FooAndBar", 2, IsUnique = true)]
public int Bar { get; set; }
public bool Value { get; set; }
}
IX_FooAndBar 出现在设计器中,确实表明这两列是唯一索引的一部分。
我做错了什么?看来我正在为 User 和 UserAttribute 设置 FK,但我不知道如何确保它们的组合是唯一的。
【问题讨论】:
标签: sql-server entity-framework indexing