【问题标题】:Entity type has no key defined EF6实体类型没有定义 EF6 的键
【发布时间】:2015-01-28 03:13:29
【问题描述】:

这是我的代码,虽然我已经提炼了 key 属性但还是有问题。

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 'Contacts' 基于没有定义键的类型 'Contacts'

【问题讨论】:

  • 真的吗?你在设置Key 属性后重建了吗?此外,我宁愿调用类Contact,因为它代表1个联系人,而不是联系人的集合。
  • 是的@Gert 我确实重建了它,但问题在于类和 ID 的命名约定。无论如何谢谢:)
  • 好吧,对你有好处,但这没有意义。这里的 key 属性应该够用了。我认为还有其他事情发生。
  • stackoverflow.com/questions/16207967/… 看看这个。这是你的答案。

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


【解决方案1】:

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

请参阅 MSDN 代码优先约定:http://msdn.microsoft.com/en-us/data/jj679962.aspx

【讨论】:

  • 当有 Key 属性时,约定不会做任何事情。
【解决方案2】:

我知道已经以一种方式回答了这个问题,但我想为遇到这个问题的人发布一种不同的方法。

即使在我想要指定为主键的属性上方定义了 [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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多