none
Validação com EF 5.0 RRS feed

  • Pergunta

  • Pessoal,

    Estou fazendo uma aplicação e gerando o EF a partir de um DB, nesse processo eu crio a model automaticamente, porém as validações dos campos vem todos em inglês, gostaria de saber se existe uma forma de alterar essas validações sem a necessidade de usar t4.

    Desde de já agradeço.


    • Editado Raul de Souza quarta-feira, 19 de dezembro de 2012 11:20
    quarta-feira, 19 de dezembro de 2012 11:20

Respostas

Todas as Respostas

  • No model, quando vc cria a propriedade. Use o "ErrorMessage"

    <Required(ErrorMessage:="«"), StringLength(20, ErrorMessage:="Este campo pode ter no máximo 20 caractéres")>
    Public Property PlanoPagamento As String


    Paulo Marcelo Dalbosco

    quarta-feira, 19 de dezembro de 2012 12:10
  • Obrigado pela resposta Paulo, mas não sei se entendi direito, o que ocorre é que eu não gostaria de usar annotation e nem fazer isso "na mão", todos os meus campos do SQL já são transformados automaticamente em entidades gerando assim todas as models via Entity Framework(eu não quero ter que digitar os campos), inclusive ele já faz a validação para mim, o problema é que a validação é em inglês e eu queria uma solução mais prática para essa validação, de forma que se eu quiser atualizar o Entity Framework eu não perca a mesma(posso utilizar partial class ou extender a classe), só gostaria de sugestões para essa validação ser automatizada, pois isso funcionaria para vários projetos e a manutenção teria que ser fácil...

    Caso não tenha ficado muito claro minha dúvida, pode me perguntar.

    Obrigado.

    quarta-feira, 19 de dezembro de 2012 13:17
  • Eu até hoje não entendi isso 100%, mas tenta isso:

      <system.web>
        <globalization culture="pt-BR" uiCulture="pt-BR" />
      </system.web>

    Colocando isso em um projeto fez com que as mensagens ficassem em português quando rodei o projeto em um pc porêm quando rodei em outro pc as mensagens não funcionaram.

    E para a view, não use sua entity diretamente nela, use view models.


    http://www.linkedin.com/pub/murilo-kunze/44/191/455

    quarta-feira, 19 de dezembro de 2012 13:32
  • Da uma olhada na dica do Murilo, o meu projeto esta com a cultura PT-BR e não traduziu as msgs. As vezes é alguma atualização do Entity ou Referência que se vc tiver vai funcionar. =)

    Você faz o Banco primeiro e ele gera as entidades, certo? E onde ele cria os Annotations? Creio que seja na sua entidade, se for la é só usar o "Error Massage", talvez você não entendeu o meu ex pq esta em VB, em C# acho que seria algo assim:

     [Required(ErrorMessage="Nome do livro é obrigatório")]
       public string Name{get; set;}


    Paulo Marcelo Dalbosco


    quarta-feira, 19 de dezembro de 2012 13:46
  • Murilo,

    tentei a cultura, não funcionou... mas parecia ser uma boa alternativa, vou fazer pesquisas visando esse ponto.

    Paulo,

    No entity ele cria um arquivo "NomeDoEdmx.Design.cs" e nesse arquivo tem todas as Entidades, models, validações... tudo, o ponto é que já está funcionando e com validação, porém a validação está em inglês e tenho outros tipo de validação que gostaria de fazer, só que não quero utilizar annotation, pois quero fazer de uma forma mais automatizada(somente agora e depois todos os projetos já teriam essa validação por Default) da forma em que você estruturou eu utilizaria com CodeFisrt, eu mudei exatamente para não ter que fazer isso "na mão", uma vez que meus projetos já possuem base de dados, já digitei todos os campos lá, e quando houver atualização ele já faça isso automático também.

    Grato pelas respostas.

    quarta-feira, 19 de dezembro de 2012 16:03
  • Murilo,

    Quanto a usar view models, tem alguma forma de criar essa model automaticamente? o problema é que sempre que eu alterar um campo na minha base de dados vou ter de alterar em muitos lugares, isso é ruim para os projetos, gostei da estrutura do Entity framework em relação a geração de Model, ele gera exatamente o que preciso e se eu quiser uma personalização ai sim eu extendo a entidade e faço as devidas alterações na model. Não faz sentido usar o Entity se ele não gerar essas estruturas, se eu tiver que fazer isso no model prefiro trabalhar com ADO que eu obtenho um ganho de performance considerável. Estou sempre visando a otimização e reutilização de código e facilidade na manutenção dos mesmo, essa estrutura visa comportar muitos projetos e que sejam desenvolvidos rapidamente, sei que a ferramenta tem falhas, mas creio que esses pontos eu consigo consertar sem muitas personalizações.

    Obrigado.

    quarta-feira, 19 de dezembro de 2012 16:12
  • Raul, não existe nada que faça isso pois não há como adivinhar o que a sua view vai necessitar. Você pode ter uma entity com 10 propriedades mas querer exibir somente duas na tela.

    E Raul, reutilização de código não significa usar um model pra qualquer coisa(e pra tudo que é situação). Se você alterar uma propriedade de qualquer forma vai ter de mudar na view pois a rename do visual studio não muda as propriedades na view. E mesmo assim, não necessariamente você terá que fazer grandes mudanças quando mudar o nome de uma propriedade por exemplo. E muito provavelmente o seu sistema será vulnerável e injeção de dados no seu POST se você usa diretamente uma entity.


    http://www.linkedin.com/pub/murilo-kunze/44/191/455

    quarta-feira, 19 de dezembro de 2012 16:22
  • Essas msgs em inglês são gerada pela classe ModelState, alguém sabe como alterar?

    Paulo Marcelo Dalbosco


    quarta-feira, 19 de dezembro de 2012 16:34
  • No momento em que o ModelState se torna inválido a classe ModelState já possui mensagens de erro referentes aos tipos de dados. Então você pode manipular a classe ModelState para traduzir as mensagens para português

    Veja detalhes da classe ModelState : http://msdn.microsoft.com/pt-br/library/system.web.mvc.modelstate.aspx


    Esse link tb tem umas dicas sobre o ModelState, vi uma ali que talvez lhe inetersse. Mas eu não testei

    http://www.criarweb.com/artigos/validacoes-asp-net-mvc.html
    • Editado Paulo M Dalbosco quarta-feira, 19 de dezembro de 2012 16:49
    • Marcado como Resposta Raul de Souza quarta-feira, 19 de dezembro de 2012 17:28
    quarta-feira, 19 de dezembro de 2012 16:45
  • Murilo,

    Quanto ao ponto de entidade apagar as propriedades na view, não é o problema, até por que essa parte de view são geradas automaticamente.

    Quanto a model eu estou fazendo o CRUD com ela e a organização dela será dependente da minha base de dados, o que não signifique que eu vá usar uma model para tudo. Eu possuo um repositório logo todo tipo de vulnerabilidade é tratada no mesmo somente 1 vez(reutilização de código), meu problema persiste em somente validação que gostaria de usar a nativa, os outros aspectos da aplicação não vejo problemas.

    Obrigado.



    • Editado Raul de Souza quarta-feira, 19 de dezembro de 2012 16:51
    quarta-feira, 19 de dezembro de 2012 16:51
  • Paulo,

    Obrigado pelas sugestões, creio que esse vai ser o caminho, testarei criar um aspect para essa validação utilizando essas funcionalidades.

    Encontrei um link também interessante:

    http://social.msdn.microsoft.com/Forums/pt-BR/mvcpt/thread/16427e1e-a03c-4edd-8329-827adfe58be9

    Obrigado.


    • Editado Raul de Souza quarta-feira, 19 de dezembro de 2012 17:28
    quarta-feira, 19 de dezembro de 2012 17:28