有人知道如何解决此错误:
System.Data.Edm.EdmEntityType :: EntityType'BlogTags'没有定义键。定义此EntityType的密钥。
将MVC 3与实体框架结合使用。
答案 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;组; }