ENTITY FRAMEWORK E INVALID COLUMN NAME

 Tópico anterior Próximo tópico Novo tópico

ENTITY FRAMEWORK E INVALID COLUMN NAME

ASP.NET

 Compartilhe  Compartilhe  Compartilhe
#490505 - 25/09/2019 11:32:43

PERCIFILHO
MATAO [SP]
Cadast. em:Dezembro/2009


Bom dia pessoal, em um projeto MVC criei uma tabela "Categoria" e outra "Servico".
E as respectivas classes:

[Table("Categoria")]
    public partial class Categoria
    {
        [Key]
        public int Id { get; set; }

        [StringLength(50)]
        [DisplayName("Descrição")]
        public string Descricao { get; set; }
    }


[Table("Servico")]
    public partial class Servico
    {
        [Key]
        public int Id { get; set; }

        public int IdCategoria { get; set; }
        public virtual Categoria Categoria { get; set; }

        [Required]
        [StringLength(100)]
        [DisplayName("Descrição")]
        public string Descricao { get; set; }
    }
}


Minha Controller está assim:

public ActionResult Index()
    {
        return View(db.Servico.Where(x => x.IdCategoria == 1).ToList());
    }


Só que quando vou rodar o projeto, me dá um erro no browser:

Invalid column name 'Categoria_Id'.
Descrição: Ocorreu uma exceção sem tratamento durante a execução da atual solicitação da Web. Examine o rastreamento de pilha para obter mais informações sobre o erro e onde foi originado no código.
Detalhes da Exceção: System.Data.SqlClient.SqlException: Invalid column name 'Categoria_Id'.
Erro de Origem:
Linha 23:         public ActionResult Index()
Linha 24:         {
Linha 25:             return View(db.Servico.Where(x => x.IdCategoria == 1).ToList());
Linha 26:         }


Por que isso ocorre e como eu faço para contornar esse erro?

____________________________________________________
Você sabe que alguém te ama não pelo que ele fala, mas pelo o que faz.
O amor não sobrevive de teorias.




#490506 - 25/09/2019 11:44:06

FOXMAN
BARRETOS
Cadast. em:Janeiro/2001


Membro da equipe
Troque o nome CATEGORIA_ID para ID apenas....

O campo Categoria_id não existe na tabela, Veririque esse campo.


Grupo DotNet.Br no FaceBook

Grupo WhatsDev



#490507 - 25/09/2019 11:50:38

PERCIFILHO
MATAO [SP]
Cadast. em:Dezembro/2009


Foxman obrigado pela resposta rápida, porém eu não posso trocar o nome da coluna pois já existe uma coluna Id que é o id do serviço.
Esse é o problema: o nome do campo da tabela é IdCategoria, nesta linha está especificado correto:
return View(db.Servico.Where(x => x.IdCategoria == 1).ToList());
Quero retornar todos os serviços cujo Id da categoria seja 1;
Só que a mensagem me diz que o nome do campo Categoria_Id é inválido, ms de onde vem esse nome: Categoria_Id?

____________________________________________________
Você sabe que alguém te ama não pelo que ele fala, mas pelo o que faz.
O amor não sobrevive de teorias.




#490512 - 25/09/2019 17:52:04

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Decore a propriedade com o nome correto do campo:

[Column("Categoria_Id")]
public int IdCategoria { get; set; }


O melhor mesmo seria usar mapeamentos de modo fluido.

_______________________________________________________________________
Virei Oráculo!
The end is nigh, be ready for the nukes!


#490514 - 26/09/2019 01:40:36

FOXMAN
BARRETOS
Cadast. em:Janeiro/2001


Membro da equipe
Citação:
:
Só que a mensagem me diz que o nome do campo Categoria_Id é inválido, ms de onde vem esse nome: Categoria_Id?

A resposta está na sua pergunta....
Esse campo está representado em algum local :
Ele jamais iria existir(na verdade, retornar essa mensagem se ele de fato não existisse).
Se vc  criou um relacionamento, cheque-o.
Verifique as chaves-estrangeiras, e se vc as declarou corretamente.

Possivelmente este erro está ligado ao relacionamento.





Grupo DotNet.Br no FaceBook

Grupo WhatsDev



#490515 - 26/09/2019 09:19:14

F001E
IBITINGA/SP
Cadast. em:Novembro/2004


 Anexos estao visíveis somente para usuários registrados

Essa base de dados é sua ou de terceiro ? Não esta nada normalizada.

Todos os ID que uso, eu mesclo com o nome da tabela para evitar isso que aconteceu com você, de ter dois campos com nomes iguais



#490516 - 26/09/2019 09:21:03

PERCIFILHO
MATAO [SP]
Cadast. em:Dezembro/2009


Bom dia, pessoal.
Não sei se consigo explicar direito o meu problema, mas é o seguinte:
Minha tabela Categoria tem os campos : Id - Descricao;
Minha tabela Servico tem os campos : Id - IdCategoria - Descricao;
Minha classe Categoria:
[Table("Categoria")]
    public partial class Categoria
    {
        [Key]
        public int Id { get; set; }

        [StringLength(50)]
        [DisplayName("Descrição")]
        public string Descricao { get; set; }
    }

Minha classe Servico:
[Table("Servico")]
    public partial class Servico
    {
        [Key]
        public int Id { get; set; }

        public int IdCategoria { get; set; }
        public virtual Categoria Categoria { get; set; }

        [Required]
        [StringLength(100)]
        [DisplayName("Descrição")]
        public string Descricao { get; set; }
    }
}

Ao tentar retornar na ActionResult os registros da tabela Servico onde o Id da Categoria seja = 1;
public ActionResult Index()
    {
        return View(db.Servico.Where(x => x.IdCategoria == 1).ToList());
    }

Retorna esse erro mencionado acima, ou seja, parece que o SqlServer entende que na linha "public virtual Categoria Categoria" estou informando um outro campo da tabela e daí ele exibe a mensagem que o campo Categoria_Id não é válido, pois eu coloquei essa linha em comentário e não exibiu mais esse erro.
Gostaria de saber como faço para resolver esse erro, pois quando eu for exibir os registros na minha View, vou precisar exibir a descrição da categoria dessa forma:
@Html.DisplayFor(modelItem => item.Categoria.Descricao)

Não sei se importa mas estou usando o VS 2019, Entity Framework e Banco de Dados Sql Server, sendo o banco de dados local (.mdf).

____________________________________________________
Você sabe que alguém te ama não pelo que ele fala, mas pelo o que faz.
O amor não sobrevive de teorias.




#490518 - 26/09/2019 10:25:50

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Você não está usando migrations?

_______________________________________________________________________
Virei Oráculo!
The end is nigh, be ready for the nukes!


#490519 - 26/09/2019 11:02:00

PERCIFILHO
MATAO [SP]
Cadast. em:Dezembro/2009


Não.


____________________________________________________
Você sabe que alguém te ama não pelo que ele fala, mas pelo o que faz.
O amor não sobrevive de teorias.




#490520 - 26/09/2019 11:27:30

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Deveria, facilita MUITO as coisas.

_______________________________________________________________________
Virei Oráculo!
The end is nigh, be ready for the nukes!


#490522 - 26/09/2019 15:47:20

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe
Você também pode mapear pelo FLUENT API.

Eu particularmente acho mais fácil, além de deixar as classes mais desacopladas.



 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por PERCIFILHO em 28/09/2019 14:36:56