这是我的代码,虽然我已经改进了关键属性,但仍然存在问题。
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“联系人”基于没有键定义的“联系人”类型
答案 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