EntityType no tiene un error clave definido

Controlador:

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); } } } 

Modelo 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 details { get; set; } } } 

Modelo:

 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; } } 

Tabla de base de datos:

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

En global.asax.cs

 Database.SetInitializer(null); 

El código anterior enumera todas las clases en las que estoy trabajando. Al ejecutar mi aplicación estoy recibiendo el error:

“Uno o más errores de validación se detectaron durante la generación del modelo” junto con “El tipo de entidad no tiene una clave definida”.

La clase Model debe cambiarse a:

 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. Asegúrese de que los miembros públicos de la clase de los estudiantes se definan como propiedades w / {get; set;} {get; set;} (las tuyas son variables públicas, un error común).

  2. Coloque una anotación [Key] encima de su propiedad elegida.

Hay varias razones por las que esto puede suceder. Algunos de estos encontré aquí , otros descubrí por mi cuenta.

  • Si la propiedad tiene otro nombre que no sea Id , debe agregarle el atributo [Key] .
  • La clave debe ser una propiedad, no un campo.
  • La clave debe ser public
  • La clave debe ser un tipo compatible con CLS, lo que significa que los tipos sin firmar como uint , ulong , etc. no están permitidos.
  • Este error también puede ser causado por errores de configuración .

Sé que esta publicación es tardía pero esta solución me ayudó:

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

se agregó [Columna (Pedido = 0)] después de que se pueda agregar [Clave] por incremento en 1:

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

etc …

En mi caso, recibí el error al crear un “Controlador MVC 5 con vista, utilizando Entity Framework”.

Solo necesitaba construir el proyecto después de crear la clase Model y no necesitaba usar la anotación [Key].

Usar la [tecla] no funcionó para mí, pero usar una propiedad de identificación lo hace. Solo agrego esta propiedad en mi clase.

 public int id {get; set} 

La razón por la cual EF Framework ‘no key’ es que EF framework necesita una clave primaria en la base de datos. Para declarar declarativamente a EF qué propiedad es la clave, agrega una anotación [Key] . O, de la manera más rápida, agregue una propiedad de ID . Entonces, el marco EF tomará ID como la clave primaria por defecto.

Todo está bien pero en mi caso tengo dos clases como esta

 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; } } } } 

Después de eliminar la clase superior, funciona bien para mí.

Para mí, el modelo estaba bien. Fue porque tenía 2 versiones diferentes del marco de la entidad. Una versión para el proyecto web y otra para el proyecto común que contiene los modelos.

Solo tuve que consolidar los paquetes nuget .

¡Disfrutar!

El objeto debe contener un campo que se utilizará como la Primary Key . Si tiene un campo llamado Id , esta será la clave primaria del objeto al que se vinculará Entity Framework.

De lo contrario, debe agregar el atributo [Key] sobre ese campo que desea usar como Primary Key , y también deberá agregar el espacio de nombres System.ComponentModel.DataAnnotations :

 public class myClass { public int Id { get; set; } [Key] public string Name { get; set; } } 

https://stackoverflow.com/a/51180941/7003760