4
respostas

System.InvalidOperationException: The entity type 'Leitura' requires a primary key to be defined.

Fiz o curso até aula 8. Implementei Model, Context, DAO, Controllers, Views para duas tabelas criadas no banco e tudo funcionado perfeitamente.

No mesmo projeto criei mais 7 tabelas - uma principal, com 6 relacionadas. Segui a risca até a aula 4 implementando tudo e quando rodo a aplicação para usar a View de qualquer tabela criada apresenta o erro: ("System.InvalidOperationException: The entity type 'Leitura' requires a primary key to be defined.") é apresentado.

A tabela leitura é a principal com mas 6 associadas.

Até as implementações da duas primeiras tabelas que funcionavam antes pararam de funcionar, mesmo não tendo relação nenhuma com as outras 7 tabelas.

Como corrigir esse "erro de Chave primária"?

4 respostas

Olá Tiago,

me manda a estrutura dessas classes, principalmente a Leitura, para eu dar uma olhada? Além disso, quando você menciona que criou 7 tabelas, você as criou na mão ou deixou que o entity mapeasse isso para você? Caso tenha criado na mão, me manda como está a estrutura das tabelas também porque pode ser que ele não esteja conseguindo mapear com suas classes. Ai para conseguir fazer isso você terá que lidar o Fluent API

Olá, Lucas,

Desde já muito obrigado pela ajuda, pois não sabia como resolver!

Criei as tabelas na mão (via script). Acho que realmente o problema possa ser de mapeamento.

Estava preparando as classes e banco para te enviar quando encontrei esse artigo do link abaixo que resolveu meu problema. Só vi vantagem em utilizar dessa forma... não sei se há desvantagens. Pode verificar por favor se devo aplicar essa solução mesmo?

https://imasters.com.br/framework/curso-entity-framework-criando-o-modelo-de-entidades/

Resumo da matéria do link acima: 1. Crei o modelo de entidades com o ADO.NET Entity Data Model. 2. Nos meus controllers referenciei as novas classes criadas automaticamente pela ferramenta (Context & Entity Classes).

Em resumo desse item 2: Cada Entity Data Model gera um classe Context e múltiplas classes entity para cada tabela do banco de dados; Expandindo o arquivo .edmx vemos dois arquivos importantes: Nome.Content.tt e Nome.tt. que dentro dessas pastas respectivamente possui o arquivo Content e classes Entity criados automaticamente. Após só fiz a referencia no meu DAO e Controller que antes estavam com problema para utilizar o novo Context e essas novas classes que foram criadas automaticamente pelo ADO.NET Entity Data Model.

Consegui listar os itens cadastrados e não mais apresentou erro.

Vide matéria completa no link acima.

É viável essa solução? Ela pode me trazer algum problema?

Novamente Obrigado!

Aguardo retorno.

Abraço

Olá Tiago,

nunca cheguei a lidar com esta ferramenta em específico, mas uma questão que chuto que pode surgir depois é aumentar a complexidade de manutenção do código. Se entendi bem, esta ferramenta vai criar suas entidades/classes a partir do que está no banco. Isso pode gerar um problema de orientação a objetos, dado que na verdade as classes serão geradas a partir de um mundo relacional. Então as classes automatizadas podem sofrer com problemas de falta de coesão, alto acoplamento, problemas de encapsulamento, etc. Fora que geralmente ferramenta automatizada de geração de código sempre acaba criando coisas a mais, que poderiam ser mais simples.

Vou implantar a solução proposta inicialmente para mapear as tabelas e retorno ou com cópias das classes ou com a resposta da solução aplicada.