EntityType não possui um erro definido por chave

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

Tabela do database:

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

Em global.asax.cs

 Database.SetInitializer(null); 

O código acima lista todas as classs em que estou trabalhando. Ao executar meu aplicativo estou recebendo o erro:

“Um ou mais erros de validação foram detectados durante a geração do modelo”, juntamente com “Tipo de entidade sem chave definida”.

A class Model deve ser alterada para:

 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. Certifique-se de que os membros públicos da turma do aluno sejam definidos como propriedades com {get; set;} {get; set;} (o seu são variables públicas – um erro comum).

  2. Coloque uma anotação [Key] no topo da sua propriedade escolhida.

Existem várias razões pelas quais isso pode acontecer. Algumas delas eu encontrei aqui , outras que descobri sozinha.

  • Se a propriedade tiver um nome diferente de Id , você precisará adicionar o atributo [Key] a ela.
  • A chave precisa ser uma propriedade, não um campo.
  • A chave precisa ser public
  • A chave precisa ser um tipo compatível com CLS, o que significa que tipos não assinados como uint , ulong etc. não são permitidos.
  • Este erro também pode ser causado por erros de configuração .

Eu sei que este post está atrasado, mas esta solução me ajudou:

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

adicionado [Coluna (Order = 0)] após [Key] pode ser adicionado por incremento de 1:

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

etc …

No meu caso, eu estava recebendo o erro ao criar um “MVC 5 Controller com visão, usando o Entity Framework”.

Eu só precisava construir o projeto depois de criar a class Model e não precisei usar a anotação [Key].

Usando a [chave] não funcionou para mim, mas usando uma propriedade id faz isso. Acabei de adicionar essa propriedade na minha aula.

 public int id {get; set} 

A razão pela qual o framework EF solicita “sem chave” é que o framework EF precisa de uma chave primária no database. Para dizer declarativamente ao EF qual propriedade é a chave, você adiciona uma anotação [Key] . Ou, da maneira mais rápida, adicione uma propriedade de ID . Então, a estrutura do EF terá a ID como a chave primária por padrão.

Tudo está certo, mas no meu caso eu tenho duas classs 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; } } } } 

Depois de eliminar a class alta, funciona bem para mim.

Para mim, o modelo estava bem. Foi porque eu tinha duas versões diferentes do framework de entidades. Uma versão para o projeto web e outra para o projeto comum que contém os modelos.

Eu apenas tive que consolidar os pacotes nuget .

Apreciar!

O object deve conter um campo que será usado como Primary Key , se você tiver um campo denominado Id , essa será, por padrão, a chave primária do object ao qual o Entity Framework se vinculará.

Caso contrário, você deve adicionar o atributo [Key] acima do campo que deseja usar como Primary Key , e também precisará adicionar o namespace System.ComponentModel.DataAnnotations :

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

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