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; } } }
-
确保学生类的公共成员被定义为w /
{get; set;}
{get; set;}
(你的是公共variables – 一个常见的错误)。 -
将
[Key]
注释放置在所选属性的顶部。
这可能有几个原因。 其中有些是我在这里find的,有些是我自己发现的。
- 如果该属性被命名为
Id
以外的其他名称,则需要向其中添加[Key]
属性。 - 关键需要成为一个财产,而不是一个领域。
- 关键需要
public
- 关键需要是符合CLS的types,这意味着像
uint
,ulong
等无符号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; } } } }
删除上层类后,对我来说工作正常。