所以我一直在关注ASP.NET的这个教程。我创建了一个Model,并打算使用Entity Framework生成一个带有视图的Controller。然而,我已经坚持这个错误几个小时研究原因和它只有2行代码,我不能为我的生活理解我是如何得到这个错误。
指向教程https://mva.microsoft.com/en-US/training-courses/introduction-to-asp-net-mvc-8322?l=Omf358Zy_1604984382的链接
答案 0 :(得分:1)
使用[Key]
属性
考虑在此类的主键上设置[Key]
属性:
[Key]
public int TaskID { get; set; }
此数据属性将让Entity Framework知道如何在执行查询,更新等时将其正确识别为此实体的标识符。
使用内置约定
实体框架通常可以自动识别this Code First Conventions article中引用的字段:
以前Code First会推断出属性是主键 该属性称为
Id
或<class name>Id
。唯一的改变 这个约定是一旦检测到主键属性 他们的类型是'int','long'或'short',他们注册为 默认情况下,数据库中的标识列。主键检测是 不区分大小写。
答案 1 :(得分:1)
实体框架需要一个主键,您可以通过
添加它[Key]
public int TaskID { get; set; }
或尝试重命名
public int TasksID { get; set; }
答案 2 :(得分:0)
在EntityFramework中,当您尝试设置主键时,可以使用数据注释或约定。如果您使用约定,则需要<className>Id
或Id
。否则,您需要在属性上方指定[Key]
。
答案 3 :(得分:0)
我们走了:
你应该像这段代码一样为你的TaskID添加[KEY]属性:
public class Tasks
{
[Key]
public int TaskID {get;set;}
public string taskStatus {get;set;}
}
希望它有所帮助;)
答案 4 :(得分:0)
[Key]
应该有效,请记住重建项目。如果您已经有用于创建架构的迁移,则必须更改它们或添加新的架构。
我建议您将班级名称改为Task
而不是Tasks
。您的类看起来像一个单独的项目,而不是项目列表。这应该有两个方面的帮助:
TaskID
的ID(它会查找仅标记为ID的字段,如果我没记错,则会查找<classname>ID
)。您不必使用[Key]
注释强制它。
Tasks
,它应该更加正确:一组Task
s,而不是一个名为Tasks
的集合,其中包含多个Tasks
sort_by
}项目。我认为C#可以区分,但你可以在不检查每个参考的情况下吗?