Vous pouvez accomplir ce que vous demandez assez facilement. Darin a un point très valable qui s'applique bien aux projets de plus grande envergure, mais je pense que pour les plus petits projets, cela ressemble à une surenchère. Il semble également que cela dépend beaucoup de savoir si vous utilisez DataAnnotations pour la validation ou l'utilisation d'une bibliothèque tierce. La repitition impliquée dans le fait de ne pas le faire ferait pour toute une nuisance de maintenance, à mon humble avis. Il y a aussi le fait que vous passez beaucoup de lignes de code à copier des données de la base de données vers le modèle de vue; Les ORM sont censés aider à éliminer cela, mais jusqu'à présent, la solution ne semble pas très bonne.
Voici un exemple de code sur comment faire ce que vous voulez. La première classe est partielle, le corps principal étant dans le code généré par EF (je vais d'abord modéliser, pas le code d'abord). En outre, à titre d'exemple, Question a un FK à QuestionGroup. Dans la base de données, il s'agit d'une colonne nommée GroupID, mais dans ViewModel, il y a une propriété nommée GroupName à afficher dans une jolie petite grille (Telerik Grid, en fait, qui casse si vous essayez de transmettre un objet EF).
[MetadataType(typeof(QuestionMetadata))]
public partial class Question
{
}
public class QuestionMetadata
{
public Int32 ID { get; set; }
[Required]
[Display(Name="Question")]
public String QuestionText { get; set; }
[Display(Name = "Order")]
public Int16 SortOrder { get; set; }
}
[MetadataType(typeof(QuestionMetadata))]
public class QuestionViewModel
{
/* Fields found in the original model */
public Int32 ID { get; set; }
public String QuestionText { get; set; }
public Int16 SortOrder { get; set; }
/* Fields that map child object data for this view model */
[Display(Name = "Question Group")]
public String GroupName { get; set; }
}
à mon humble avis à la fois EF et Telerik me forcent à ne pas être très sec ici, mais il n'y a rien que je puisse faire. EF devrait générer ces DataAnnotations par défaut (ou au moins avoir l'option), car il sait évidemment quels champs sont requis (pas null) ou quelle est la longueur maximale des différentes chaînes. Puis Telerik me force à créer le ViewModel, qui est aussi douloureux.
Merci beaucoup pour votre réponse. Je connaissais en effet l'attribut MetadataType mais j'ai complètement oublié que je pouvais l'utiliser ici aussi. – nttakr