如何修复System.Data.Edm.EdmEntityType没有键

时间:2011-03-11 20:08:56

标签: .net asp.net-mvc linq entity-framework

有人知道如何解决此错误:

  

System.Data.Edm.EdmEntityType :: EntityType'BlogTags'没有定义键。定义此EntityType的密钥。

将MVC 3与实体框架结合使用。

6 个答案:

答案 0 :(得分:24)

只需将[Key]放在您的财产(呈现主键)之上。像这样的东西,

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

答案 1 :(得分:14)

如果实体的密钥遵循约定'Id'或'EntityNameId',MVC3将自动识别该实体的密钥。此外,实体必须将其作为属性公开,并且必须是PUBLIC。我犯了为我的财产使用protected的错误并得到了这个错误。

一个很好的例子是:

public int Id { get; set; }

OR

public int EntityNameId { get; set; }

如果您不能遵循此约定,或者您希望在代码中非常明确,请使用[Key]属性。

答案 2 :(得分:5)

错误告诉您需要知道的全部内容:“定义此EntityType的密钥”。

在EF中,所有实体都必须具有某种类型的主键。

答案 3 :(得分:3)

本着分享同一问题解决方案的精神......

我遇到了同样的问题,但在使用VS2012编写MVC 4应用程序时,[Key]解决方案无法解决这个问题。

我忘了在模型成员中加入getter和setter。公开它们是不够的,Visual Studio会给你相同的错误信息。

我已经确定了导致此消息的5个方案 - 涵盖在a small blog post about it中。

答案 4 :(得分:0)

将小小的tid位分开。在我的模型上,我将我的代码从一个.NET框架移植到另一个.NET框架并错过了将字符串xml字段转换为XDocument的属性。该属性应该已经应用了NotMappedAttribute,但就像我说的那样,我忘记了,然后我开始得到这个不是非常具体的错误:

在模型生成期间检测到一个或多个验证错误:

\ tSystem.Data.Entity.Edm.EdmEntityType :: EntityType'XDocument'没有定义键。定义此EntityType的键。 \ tSystem.Data.Entity.Edm.EdmEntitySet:EntityType:EntitySet'XDocuments'基于没有定义键的'XDocument'类型。

我把我的尾巴拖了大约一个小时,因为错误发生在我的DbContext类暴露的其他模型之一上。出于挫折感,我在装配和BAMB中搜索了每个XDocument属性!找到一个没有NotMapped属性的人。

只是想把它放在那里以防止其他人拔掉头发。

示例:

// This NotMappedAttribute was missing and is required to prevent EF
// from treating the XDocument class as an entity that requires
// a KeyAttribute.
[NotMapped] //<== missing until now
public XDocument DataXml {
    get { return XDocument.Parse(this.m_Xml); }
    set {
        this.m_Data = value.ToString();
    }
}

答案 5 :(得分:0)

与@Gilesey相同的情况。在我的情况下,我必须将关键属性标记为public,

public int Id {get;组; }