2011-03-11 94 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;組; }

相關問題