EntityType没有键定义的错误

控制器:

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using MvcApplication1.Models; using System.ComponentModel.DataAnnotations.Schema; namespace MvcApplication1.Controllers { public class studentsController : Controller { // // GET: /students/ public ActionResult details() { int id = 16; studentContext std = new studentContext(); student first = std.details.Single(m => m.RollNo == id); return View(first); } } } 

DbContext型号:

 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Data.Entity; namespace MvcApplication1.Models { public class studentContext : DbContext { public DbSet<student> details { get; set; } } } 

模型:

 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.ComponentModel.DataAnnotations.Schema; namespace MvcApplication1.Models { [Table("studentdetails")] public class student { public int RollNo; public string Name; public string Stream; public string Div; } } 

数据库表:

 CREATE TABLE [dbo].[studentdetails]( [RollNo] [int] NULL, [Name] [nvarchar](50) NULL, [Stream] [nvarchar](50) NULL, [Div] [nvarchar](50) NULL ) 

在global.asax.cs中

 Database.SetInitializer<MvcApplication1.Models.studentContext>(null); 

上面的代码列出了我正在处理的所有类。 运行我的应用程序时收到错误:

“模型生成期间检测到一个或多个validation错误”以及“实体types没有定义密钥”。

Model类应该更改为:

 using System.Collections.Generic; using System.Linq; using System.Web; using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations; namespace MvcApplication1.Models { [Table("studentdetails")] public class student { [Key] public int RollNo { get; set; } public string Name { get; set; } public string Stream { get; set; } public string Div { get; set; } } } 
  1. 确保学生类的公共成员被定义为w / {get; set;} {get; set;} (你的是公共variables – 一个常见的错误)。

  2. [Key]注释放置在所选属性的顶部。

这可能有几个原因。 其中有些是我在这里find的,有些是我自己发现的。

  • 如果该属性被命名为Id以外的其他名称,则需要向其中添加[Key]属性。
  • 关键需要成为一个财产,而不是一个领域。
  • 关键需要public
  • 关键需要是符合CLS的types,这意味着像uintulong等无符号types是不允许的。
  • 这个错误也可能是由configuration错误引起的。

我知道这个post很晚,但这个解决scheme帮助了我:

  [Key] [Column(Order = 0)] public int RoleId { get; set; } 

在[Key]后添加[Column(Order = 0)]可以按1增加:

  [Key] [Column(Order = 1)] public int RoleIdName { get; set; } 

等等…

在我的情况下,当创build一个“使用entity framework查看MVC 5控制器”时,我得到了错误。

我只需要在创buildModel类之后构build项目,而不需要使用[Key]注释。

使用[键]没有为我工作,但使用ID属性做到这一点。 我只是在我的课堂上添加这个属性。

 public int id {get; set} 

EF框架提示“无关键”的原因是EF框架在数据库中需要一个主键。 要声明地告诉EF关键是哪个属性,你需要添加一个[Key]注解。 或者,最快的方法是添加一个ID属性。 然后,EF框架默认将ID作为主键。

一切正常,但就我而言,我有两个这样的课

 namespace WebAPI.Model { public class ProductsModel { [Table("products")] public class Products { [Key] public int slno { get; set; } public int productId { get; set; } public string ProductName { get; set; } public int Price { get; set; } } } } 

删除上层类后,对我来说工作正常。