我有一个名为 Foobar 的实体,我想添加一个约束,确保ColA(int)和ColB(字符串)不能有2个重复的元组,所以如果数据添加为接下来,我会在添加第3行时遇到数据库错误。
ID A B
1 1 Happy
2 1 Sad
3 1 Happy
为此,我尝试添加索引 IX_ColAColB 。但是我收到了错误消息
消息=列' ColB'在表格'dbo.Foobar'是一种无效的类型,无法用作索引中的键列。
如果删除两个索引行,则错误消失,但是我无法在这两行上强制执行单一行。我已经通过将 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] annotation
,我仍然会出现同样的错误答案 0 :(得分:1)
索引列的最大长度为900字节(请检查此link)。要解决此问题,请尝试将最大长度更改为20。
[MaxLength(20),Index("IX_ColAColB", 2, IsUnique = true)]
public string ColB { get; set; }