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<student> 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 banco de dados:
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<MvcApplication1.Models.studentContext>(null);
O código acima lista todas as classes nas quais 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 "O tipo de entidade não possui uma chave definida".
c#
.net
entity-framework
Codificador
fonte
fonte
Respostas:
A classe Model deve ser alterada para:
fonte
[Key]
) até que eu altere os tipos de dados (eu os alterei paraunsigned
) e apenas o byte funciona existe um motivo pelo qual não posso usarunsigned
valores?Certifique-se de que os membros públicos da turma sejam definidos como propriedades com
{get; set;}
(as suas são variáveis públicas - um erro comum).Coloque uma
[Key]
anotação em cima da propriedade escolhida.fonte
Existem várias razões pelas quais isso pode acontecer. Alguns deles eu encontrei aqui , outros eu descobri por conta própria.
Id
, você precisará adicionar o[Key]
atributo a ela.public
uint
,ulong
etc. não são permitidos.fonte
private set
de algumas propriedades durante uma limpeza. O resultado foi o "EntityType não possui erro definido por chave". Portanto, cuidado com as ferramentas de limpeza, removendo o código necessário.ID
,Id
,ClassNameID
,ClassNameId
você não precisa ter que usar[Key] attribute
Eu sei que este post está atrasado, mas esta solução me ajudou:
[Coluna (Order = 0)] adicionada depois que [Key] pode ser adicionada por incremento de 1:
etc ...
fonte
No meu caso, eu estava recebendo o erro ao criar um "MVC 5 Controller com vista, usando o Entity Framework".
Eu só precisava criar o projeto depois de criar a classe Model e não precisei usar a anotação [Key].
fonte
Usar a [chave] não funcionou para mim, mas usar uma propriedade id funciona. Acabei de adicionar esta propriedade na minha classe.
fonte
[Key]
, mas uma propriedade chamada "id
" também funcionará.O objeto deve conter um campo que será usado como o
Primary Key
, se você tiver um campo chamadoId
, essa será, por padrão, a chave primária do objeto ao qual o Entity Framework se vinculará.Caso contrário, você deve adicionar o
[Key]
atributo acima desse campo que deseja usar como oPrimary Key
e também precisará adicionar o espaço para nomeSystem.ComponentModel.DataAnnotations
:https://stackoverflow.com/a/51180941/7003760
fonte
Além disso, lembre-se, não se esqueça de adicionar palavras-chave públicas como esta
você deve usar a palavra-chave pública como esta
fonte
A razão pela qual a estrutura EF solicita 'sem chave' é que a estrutura EF precisa de uma chave primária no banco de dados. Para informar declarativamente à EF qual propriedade é a chave, adicione uma
[Key]
anotação. Ou, da maneira mais rápida, adicione umaID
propriedade. Em seguida, a estrutura EF teráID
como chave primária por padrão.fonte
partial
classe. Você pode criar um segundo arquivo como umapartial
classe com o mesmo nome e adicionar a propriedade novamente com o[Key]
atributoVocê não precisa usar o atributo-chave o tempo todo. Verifique se o arquivo de mapeamento endereçou corretamente a chave
e não se esqueça de adicionar o mapeamento no OnModelCreating do Repositório
fonte
Para mim, o modelo estava bem. Foi porque eu tinha duas versões diferentes da estrutura da entidade. Uma versão para o projeto da web e outra para o projeto comum que contém os modelos.
Eu apenas tive que consolidar os pacotes de pepitas .
Aproveitar!
fonte
Tudo está certo, mas no meu caso eu tenho duas classes como esta
Depois de excluir a classe alta, funciona bem para mim.
fonte