所以我一直在關注ASP.NET上的這個教程。我創建了一個模型,並打算使用實體框架生成具有視圖的控制器。然而,我一直在這個錯誤上停留了近幾個小時,研究原因及其唯一的兩行代碼,而且我不能理解我如何得到這個錯誤。EntityType''沒有定義密鑰
鏈接教程https://mva.microsoft.com/en-US/training-courses/introduction-to-asp-net-mvc-8322?l=Omf358Zy_1604984382
所以我一直在關注ASP.NET上的這個教程。我創建了一個模型,並打算使用實體框架生成具有視圖的控制器。然而,我一直在這個錯誤上停留了近幾個小時,研究原因及其唯一的兩行代碼,而且我不能理解我如何得到這個錯誤。EntityType''沒有定義密鑰
鏈接教程https://mva.microsoft.com/en-US/training-courses/introduction-to-asp-net-mvc-8322?l=Omf358Zy_1604984382
這裏,我們去:
你應該添加[KEY]屬性爲你的TaskID像這樣的代碼:
public class Tasks
{
[Key]
public int TaskID {get;set;}
public string taskStatus {get;set;}
}
希望它有幫助;)
啊,它第一次不工作的原因是因爲我沒有發佈命名空間。謝謝! –
使用[Key]
屬性
考慮在這個類的主鍵設置[Key]
屬性:
[Key]
public int TaskID { get; set; }
該數據屬性將讓實體框架知道如何執行查詢,更新等時正確認識到這一點,作爲這個實體的標識符
使用內置的約定
實體框架通常可以自動識別它的領域,如this Code First Conventions article引用:
以前代碼如果 該屬性被稱爲
Id
或<class name>Id
,則首先會推斷屬性是主鍵。到 這個約定的唯一變化是,一旦主鍵屬性,如果 其類型爲「詮釋」,「長」或「短」,他們被登記爲默認數據庫 標識列檢測。主鍵檢測是 不區分大小寫。
它不區分大小寫:它在您發佈的報價中說得很對。它只是無法找到它,因爲類名是複數。 – DrewJordan
在EntityFramework中,當您嘗試設置主鍵時,可以使用數據註釋或約定。如果您使用約定,則需要使用<className>Id
或Id
。否則,您需要在屬性上方指定[Key]
。
實體框架需要一個主鍵,你可以通過
[Key]
public int TaskID { get; set; }
加入,或嘗試將其重命名
public int TasksID { get; set; }
[Key]
應該工作,記得重建你的項目。如果您已經有了用於創建架構的遷移,那麼您將不得不更改它們,或者添加一個新的架構。
我會建議將您的班級名稱更改爲Task
而不是Tasks
。你的課堂看起來像一個單一的項目,而不是項目列表。這將有助於在幾個方面:
TaskID
的ID(它看起來字段要麼只標記ID或<classname>ID
如果我沒有記錯)。您不必用[Key]
註釋強制它。 Tasks
,這應該是比較正確的:一組Task
秒,而不是一組稱爲Tasks
持有幾個單獨Tasks
項目。我認爲C#可以分辨出不同,但是您可以在不檢查每個引用的情況下嗎?
將[Key]屬性添加到您的主鍵。 – Zaki
我已經嘗試了在「TaskID」上面添加[Key]的選項,但是我沒有鏈接數據庫,但它沒有解決問題 –