实体类型没有键定义的EF6

时间:2014-11-29 19:09:38

标签: entity-framework asp.net-mvc-5 models

这是我的代码,虽然我已经改进了关键属性,但仍然存在问题。

public class Contacts
{
    [Key]
    public int ContactId { get; set; }
    public string Name { get; set; }
    public string Address { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string Zip { get; set; }
    [DataType(DataType.EmailAddress)]
    public string Email { get; set; }
}

我得到的错误是:

  

实体类型“联系人”未定义任何键。定义此实体类型的键。
  实体类型:EntitySet“联系人”基于没有键定义的“联系人”类型

2 个答案:

答案 0 :(得分:7)

如果您使用的是EF Code First(未在问题中指定),则需要将ContactId属性名称更改为ContactsId以匹配 ClassName + Id的约定,以便定义密钥对于通讯录实体类型。

请参阅MSDN Code First Conventions:http://msdn.microsoft.com/en-us/data/jj679962.aspx

答案 1 :(得分:0)

我知道这已经以一种方式得到了解答,但我想为遇到这种情况的人发布不同的方法。

即使将[Key]定义在我想指定为主键的属性上方,也会发生此错误。在Update-Database命令期间发生的错误是由我的迁移命名(通过Add-Migration)引起的,与我想要添加的实体相同。这是因为Add-Migration命令创建了一个与实体名称匹配的分部类。

例如:

public class Contacts
{
    [Key]
    public int ContactId { get; set; }
    public string Name { get; set; }
}

我执行时没有工作:

Add-Migration Contacts
Update-Database

因为迁移类签名如下所示,并且正文中没有包含[Key]属性的属性

public sealed partial class Contacts

为了解决这个问题,我删除了同名的迁移并修改了Add-Migration命令:

Add-Migration ContactsTable
Update-Database