EntityType''没有定义键

时间:2016-05-03 13:33:04

标签: c# asp.net asp.net-mvc entity-framework

所以我一直在关注ASP.NET的这个教程。我创建了一个Model,并打算使用Entity Framework生成一个带有视图的Controller。然而,我已经坚持这个错误几个小时研究原因和它只有2行代码,我不能为我的生活理解我是如何得到这个错误。

指向教程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

5 个答案:

答案 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>IdId。否则,您需要在属性上方指定[Key]

答案 3 :(得分:0)

我们走了:

你应该像这段代码一样为你的TaskID添加[KEY]属性:

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

希望它有所帮助;)

答案 4 :(得分:0)

[Key]应该有效,请记住重建项目。如果您已经有用于创建架构的迁移,则必须更改它们或添加新的架构。

我建议您将班级名称改为Task而不是Tasks。您的类看起来像一个单独的项目,而不是项目列表。这应该有两个方面的帮助:

  1. EF会正确地获取TaskID的ID(它会查找仅标记为ID的字段,如果我没记错,则会查找<classname>ID)。您不必使用[Key]注释强制它。
  2. 您的DbSet现在可以被称为Tasks,它应该更加正确:一组Task s,而不是一个名为Tasks的集合,其中包含多个Tasks sort_by }项目。我认为C#可以区分,但你可以在不检查每个参考的情况下吗?