Usuário com melhor resposta
DataAnnotations com EF e MVC 4

Pergunta
-
Pessoal tenho um aplicação que foi desenvolvida com EF Database first e asp.net mvc 4, o problema é que ela ja encontra-se em produção e preciso implementar o dataannotations nas classes para a validação ser mais rápida, mas como faço isso já que o ef cria as classes automaticamente.
Desde já agradeço.
Respostas
-
Thiago, não tem muito mistério meu velho.
Vamos por passos:
1. Gere seu EDMX
2. Crie uma pasta chamada "Validation"
3. Crie uma classe parcial (partialclass) chamada "Cidades" (como exemplo) dentro da pasta "Validation".
4. Deixe o namespace dessa partialclass idêntico ao namespace do EDMX gerado
5. Siga o código abaixo:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ComponentModel.DataAnnotations; using System.ComponentModel; namespace [SeuNamespace] { [MetadataType(typeof(Cidades_Metadata))] public partial class Cidades { } public class Cidades_Metadata { [Required(ErrorMessage = "Nome obrigatório")] [DisplayName("Nome:")] [StringLength(100)] public string [Propriedade1]{ get; set; } [Required(ErrorMessage = "Email inválido!")] [DisplayName("Email:")] [Email(ErrorMessage = "Email inválido!")] public string [Propriedade2]{ get; set; } } }
O código entre colchetes é para você substituir pelos seus parâmetros aí Ok?
- Marcado como Resposta Thiago_Porto sexta-feira, 12 de abril de 2013 11:54
Todas as Respostas
-
-
-
É bem simples. É só vc criar uma partial class da classe que vc quer validar. Ai vc coloca o MetadataType em cima dela. Desse modo:
[MetadataType(typeof(Sua_Classe))] public partial class Sua_Classe { } public class Valida_SuaClasse { [Required] public int ID { get; set; } [Required] [StringLength(50)] public string Nome { get; set; } }
Esses arquivos com partial classes e seu arquivo .EDMx devem estar na mesma pasta.
-
[MetadataType(typeof(Sua_Classe))] public partial class Sua_Classe ============== "Tem que ser o mesmo nome da entidade que o EF mapeou?" { } public class Valida_SuaClasse ============== "Essa classe que usarei em minha view? " { [Required] public int ID { get; set; } [Required] [StringLength(50)] public string Nome { get; set; } }
-
[MetadataType(typeof(Sua_Classe))] public partial class Sua_Classe ============== "Tem que ser o mesmo nome da entidade que o EF mapeou?" { } public class Valida_SuaClasse ============== "Essa classe que usarei em minha view? " { [Required] public int ID { get; set; } [Required] [StringLength(50)] public string Nome { get; set; } }
Resposta 1: sim
Resposta 2: não - você vai usar a "Sua_Classe", a entidade do banco de dados.
E o correto no código acima é:
[MetadataType(typeof(Valida_SuaClasse))]
-
-
-
-
Thiago, não tem muito mistério meu velho.
Vamos por passos:
1. Gere seu EDMX
2. Crie uma pasta chamada "Validation"
3. Crie uma classe parcial (partialclass) chamada "Cidades" (como exemplo) dentro da pasta "Validation".
4. Deixe o namespace dessa partialclass idêntico ao namespace do EDMX gerado
5. Siga o código abaixo:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ComponentModel.DataAnnotations; using System.ComponentModel; namespace [SeuNamespace] { [MetadataType(typeof(Cidades_Metadata))] public partial class Cidades { } public class Cidades_Metadata { [Required(ErrorMessage = "Nome obrigatório")] [DisplayName("Nome:")] [StringLength(100)] public string [Propriedade1]{ get; set; } [Required(ErrorMessage = "Email inválido!")] [DisplayName("Email:")] [Email(ErrorMessage = "Email inválido!")] public string [Propriedade2]{ get; set; } } }
O código entre colchetes é para você substituir pelos seus parâmetros aí Ok?
- Marcado como Resposta Thiago_Porto sexta-feira, 12 de abril de 2013 11:54
-
-
Uma dúvida:
Quando eu criar minha View para Insert no banco eu tenho que colocar esta class "Cidade_MetaData"
Ex:
@model MVC4Estudies.Model.Cidade_MetaData
No meu caso eu uso repositorio genérico e UnitOfWork e dai ela não reconheçe esta entidade.
Como proceder?
Antonio Cardoso S. Júnior - MCP, Partner Network Blog - http://devnetbr.wordpress.com/
-
Olá Antonio,
A classe de Metadata serve somente para a validação. Use a classe padrão nas suas views e controllers:
@model MVC4Estudies.Model.Cidade
- Editado João_ PradoModerator sábado, 28 de setembro de 2013 19:41