2012-07-31 3 views
1

J'ai une question relative aux bonnes pratiques en matière de validation utilisant MVC et POCO. D'après ce que je peux dire, la meilleure pratique consiste à avoir un ViewModel qui reflète le POCO et ensuite utiliser quelque chose comme AutoMapper pour analyser le ViewModel au POCO après (le modèle de vue) est validée.Validation ASP.Net MVC avec Entity Framework et POCO

Tout va bien, mais je me demande s'il y a des problèmes d'hériter du POCO et de ne supprimer que les propriétés que je souhaite valider dans le View Model?

POCO:

public partial class Sector 
    { 
     public virtual int SectorId { get; set; } 

     public virtual string Name { get; set; } 
    } 

Mon ViewModel pourrait ressembler à ceci:

public class SectorDTO : Sector 
    { 
     [Required] 
     [StringLength(10)] 
     public override string Name {get; set;} 
    } 

MISE À JOUR

Cette solution a fini par ne fonctionne pas, la plupart du temps en raison de la façon dont ma couche d'affaires et les couches de données sont configurées. Ma solution était plutôt de créer un ViewModel qui contenait un DTO avec toute la validation, puis d'utiliser AutoMapper pour redéfinir l'objet au type POCO.

+0

Semble assez raisonnable pour moi. Je dirais que si elle compile et fonctionne d'avant en arrière, alors allez-y –

+0

Cette solution a fini par ne pas fonctionner. –

+1

Votre solution mise à jour est ce que je fais aussi dans votre cas. Aussi pour la validation, vous pouvez essayer http://fluentvalidation.codeplex.com/. – cubski

Répondre

0

j'ai fait comme ci-dessous:

public partial class SectorMetaData 
{ 
    [Required(ErrorMessage="Required Filed")] 
    public int SectorId{ get; set;} 
    [Required(ErrorMessage="Required Filed")] 
    public string Name{get; set;} 

} 

[MetadataType(typeof(SectorMetaData))] 
public partial class Sector 
{ 
    public int SectorId{ get; set;} 
    public string Name{get; set;} 
} 

Cette classe doit être le même espace de noms que la classe POCO. J'espère que cela aide!

Questions connexes