在实体框架代码中首先定义一个唯一的密钥

时间:2016-09-13 18:24:01

标签: c# entity-framework ef-code-first data-annotations

我正在尝试在Entity Framework中定义一个唯一的键约束。

Last_Name表中Author属性的唯一键。

我正在使用Entity Framework 6.0版。

  1. This answer使用数据注释
  2. 引导我
  3. This answer显示在上下文类
  4. 中使用SQL命令执行此操作

    尝试这样做是最简单的方法。所以我更喜欢Data Annotations,但是我收到了这个错误:

      

    System.Data.SqlClient.SqlException:表中的列'Last_Name'   'dbo.Authors'的类型无效,无法用作关键列   索引。

    代码:

    public class Author
    {
        public Author()
        {
        }
    
        [Key]
        public int Auth_Id { get; set; }
    
        public string First_Name { get; set; }  
    
        [Index("IX_FirstAndSecond", 1, IsUnique = true)]
        public string Last_Name { get; set; }
    
        public string Biography { get; set; }
    }
    

1 个答案:

答案 0 :(得分:1)

最有可能的问题在于,默认情况下,EF代码优先将所有字符串字段都放入数据库中的VARCHAR(MAX) - 无法编入索引(因为它的大小超过900字节)。

您可能只需要定义一个字符串长度(对于所有您的字符串字段,这将是好主意):

public class Author
{
    public Author()
    {
    }

    [Key]
    public int Auth_Id { get; set; }

    [StringLength(100)]
    public string First_Name { get; set; }  

    [Index("IX_FirstAndSecond", 1, IsUnique = true)]
    [StringLength(100)]
    public string Last_Name { get; set; }

    public string Biography { get; set; }
}

现在,您的First_NameLast_Name列应该在数据库表中VARCHAR(100),并且索引应该应用得很好。