2011-03-11 147 views

回答

5

错误告诉你所有你需要知道的:“定义这个EntityType的关键”。

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

+1

我已经把一个PK在SQL Server中,但它似乎没有刷新VS来看到这呢? – RPS 2011-03-11 20:16:21

+1

它可能没有,请尝试右键单击模型并选择“从数据库更新模型”,否则只需右键单击PK字段并选择“实体键”项目。 – CodingGorilla 2011-03-11 20:20:22

+0

我有一个关键的实体类型 - SQL和实体框架设计师甚至在旁边都会显示一个小钥匙图标。 – BrainSlugs83 2012-11-03 23:03:11

24

只需将[钥匙]放在您的财产(这是呈现主键)的顶部。类似这样,

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

但是,如果文件是自动生成的,那么它将在您重新运行时擦除更改项目。 – BrainSlugs83 2012-11-03 22:53:56

+0

不,不适用于我 - 我的字段名称以ID结尾,并且它具有[Key]属性。也是一个属性,即{get;组; } – DaveBoltman 2015-11-16 12:42:53

14

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

一个很好的例子是:

public int Id { get; set; } 

OR

public int EntityNameId { get; set; } 

,如果你想在你的代码非常明确的使用[关键]属性,如果你不能按照本公约或。

+2

如果有一个已经存在的数据库并且仍然出现相同的错误,会发生什么情况?我正在使用MVC 3和SQL Server 2008 R2。 – 2012-02-10 00:46:18

+0

此外,列名称也是“FormID”也使用[Key] – 2012-02-10 00:52:15

+0

啊!必须是属性...这是_my_错误!谢谢。 – BruceHill 2012-07-29 17:36:34

3

在分享解决同一问题的精神......

我有同样的问题,但编码MVC 4应用程序与VS2012时,它不是由[重点]解决固定。

我忘了在模型成员中包含getter和setter。仅仅让他们公开是不够的,Visual Studio会给你同样的错误信息。

我确定了导致此消息的5个方案 - 覆盖a small blog post about it

0

Intersting小点点分享。在我的模型中,我将代码从一个.NET框架移植到另一个框架,并错过了将字符串xml字段转换为XDocument的属性。酒店应该有应用了NotMappedAttribute,但就像我说的,我忘了,然后我开始这个-特异性不是很错误:模型生成过程中检测到

一个或多个验证错误:

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

由于错误发生在我的DbContext类公开的其他模型之一上,所以我对我的尾巴进行了约1个小时的查找。出于挫折感,我通过我的程序集和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(); 
    } 
} 
0

相同的情况@Gilesey。在我的情况下,我不得不标记关键属性公开,

public int Id {get;组; }

相关问题