我正在尝试在Entity Framework中定义一个唯一的键约束。
此Last_Name
表中Author
属性的唯一键。
我正在使用Entity Framework 6.0版。
尝试这样做是最简单的方法。所以我更喜欢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; }
}
答案 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_Name
和Last_Name
列应该在数据库表中VARCHAR(100)
,并且索引应该应用得很好。