【发布时间】:2015-07-14 05:17:24
【问题描述】:
我有一个名为 Foobar 的实体,我想添加一个约束,以确保 ColA (int) 和 ColB (string) 没有 2 个重复的元组,所以如果数据添加为接下来,我会在添加第 3 行时遇到数据库错误。
ID A B
1 1 Happy
2 1 Sad
3 1 Happy
为此,我尝试添加索引 IX_ColAColB。但是我收到一条错误消息
Message=表 'dbo.Foobar' 中的列 'ColB' 的类型不能用作索引中的键列。
如果我删除两个索引行,错误就会消失,但是我无法对这两行强制执行唯一性。我已经通过将 ColB 更改为整数进行了实验,然后它就可以工作了。难道没有办法确保字符串与数字结合起来是唯一的吗?
public class Foobar
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int FoobarID { get; set; }
[Index("IX_ColAColB", 1, IsUnique = true)]
public int ColA { get; set; }
[Index("IX_ColAColB", 2, IsUnique = true)]
public string ColB { get; set; }
...
...
事实证明 ColB 可以为空,但如果我添加 [Required] 注释,我仍然会遇到同样的错误
【问题讨论】: