如何确保EF中整数和字符串的唯一性?

时间:2015-07-13 20:55:37

标签: entity-framework indexing

我有一个名为 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

,我仍然会出现同样的错误

1 个答案:

答案 0 :(得分:1)

索引列的最大长度为900字节(请检查此link)。要解决此问题,请尝试将最大长度更改为20。

 [MaxLength(20),Index("IX_ColAColB", 2, IsUnique = true)]
 public string ColB { get; set; }