所以我一直在关注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]的选项,但是我没有链接数据库,但它没有解决问题 –