【问题标题】:How to ensure uniqueness for an integer and a string in EF?如何确保 EF 中整数和字符串的唯一性?
【发布时间】: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] 注释,我仍然会遇到同样的错误

【问题讨论】:

    标签: entity-framework indexing


    【解决方案1】:

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

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

    【讨论】:

    • 我正要发布,如果我添加 [Column(TypeName = "VARCHAR")] 可以修复它,但你的方式更可取,因为它我也可以将长度设置为相同时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-29
    • 1970-01-01
    相关资源
    最近更新 更多