2016-05-03 130 views
0

所以我一直在關注ASP.NET上的這個教程。我創建了一個模型,並打算使用實體框架生成具有視圖的控制器。然而,我一直在這個錯誤上停留了近幾個小時,研究原因及其唯一的兩行代碼,而且我不能理解我如何得到這個錯誤。EntityType''沒有定義密鑰

鏈接教程https://mva.microsoft.com/en-US/training-courses/introduction-to-asp-net-mvc-8322?l=Omf358Zy_1604984382 This is all the code I have written Receiving this message

+0

將[Key]屬性添加到您的主鍵。 – Zaki

+0

我已經嘗試了在「TaskID」上面添加[Key]的選項,但是我沒有鏈接數據庫,但它沒有解決問題 –

回答

0

這裏,我們去:

你應該添加[KEY]屬性爲你的TaskID像這樣的代碼:

public class Tasks 
{ 
[Key] 
public int TaskID {get;set;} 
public string taskStatus {get;set;} 
} 

希望它有幫助;)

+0

啊,它第一次不工作的原因是因爲我沒有發佈命名空​​間。謝謝! –

1

使用[Key]屬性

考慮在這個類的主鍵設置[Key]屬性:

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

該數據屬性將讓實體框架知道如何執行查詢,更新等時正確認識到這一點,作爲這個實體的標識符

使用內置的約定

實體框架通常可以自動識別它的領域,如this Code First Conventions article引用:

以前代碼如果 該屬性被稱爲Id<class name>Id,則首先會推斷屬性是主鍵。

到 這個約定的唯一變化是,一旦主鍵屬性,如果 其類型爲「詮釋」,「長」或「短」,他們被登記爲默認數據庫 標識列檢測。主鍵檢測是 不區分大小寫。

+0

它不區分大小寫:它在您發佈的報價中說得很對。它只是無法找到它,因爲類名是複數。 – DrewJordan

0

在EntityFramework中,當您嘗試設置主鍵時,可以使用數據註釋或約定。如果您使用約定,則需要使用<className>IdId。否則,您需要在屬性上方指定[Key]

1

實體框架需要一個主鍵,你可以通過

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

加入,或嘗試將其重命名

public int TasksID { get; set; } 
0

[Key]應該工作,記得重建你的項目。如果您已經有了用於創建架構的遷移,那麼您將不得不更改它們,或者添加一個新的架構。

我會建議將您的班級名稱更改爲Task而不是Tasks。你的課堂看起來像一個單一的項目,而不是項目列表。這將有助於在幾個方面:

  1. EF會妥善拿起TaskID的ID(它看起來字段要麼只標記ID或<classname>ID如果我沒有記錯)。您不必用[Key]註釋強制它。
  2. 你DbSet現在可以稱爲Tasks,這應該是比較正確的:一組Task秒,而不是一組稱爲Tasks持有幾個單獨Tasks項目。我認爲C#可以分辨出不同,但是您可以在不檢查每個引用的情況下嗎?
相關問題