3 votes

Existe-t-il un outil dans Visual Studio ou un plug-in pour automatiser la création de la validation des classes de copains ?

Le livre de Scott Hanselman m'explique comment créer l'application NerdDinner MVC.

Pour valider le type d'entité Dîner généré par l'assistant de modèle de données d'entité, il a d'abord étendu l'entité Dîner en utilisant l'astuce de la classe partielle, puis il a créé une classe de copains à associer à Dîner.

Voir le code suivant pour les détails.

using System.ComponentModel.DataAnnotations;

namespace NerdDinner.Models
{
    [MetadataType(typeof(DinnerValidation))]
    public partial class Dinner { }

    public class DinnerValidation
    {
        [Required(ErrorMessage = "Title is required")]
        [StringLength(50, ErrorMessage = "Title may not be longer than 50 characters")]
        public string Title { get; set; }

        [Required(ErrorMessage = "Description is required")]
        [StringLength(256, ErrorMessage = "Description may not be longer than 256 characters")]
        public string Description { get; set; }

        [Required(ErrorMessage = "Addresss is required")]
        public string Address { get; set; }

        [Required(ErrorMessage = "Country is required")]
        public string Country { get; set; }

        [Required(ErrorMessage = "Contact phone is required")]
        public string ContactPhone { get; set; }
    }
}

Ma question est la suivante

Existe-t-il un moyen "pratique" de créer et d'associer la classe de copains à Dinner ? Je veux dire que nous pouvons utiliser un outil dans Visual Studio ou n'importe quel plug-in pour créer la classe de copains et associer automatiquement le copain au dîner. Bien sûr, je devrais faire quelques ajustements au code généré pour répondre à mes besoins, mais ce n'est pas un gros problème.

EDIT 1 : Je vais ajouter quelques informations supplémentaires. L'assistant de modèle de données d'entité est utile car il crée une validation de schéma basée sur le schéma de la base de données. Par exemple, la propriété DinnerId sera définie à Int32 par défaut pour correspondre au type de la colonne DinnerID qui est de type int.

1voto

YoupTube Points 1554

Ce n'est pas possible avec l'assistant de modèle de données d'entité. Mais vous pouvez étendre le générateur (fichier .tt qui génère les entités) et lui permettre d'ajouter [MetadataType(typeof(<#classname#>Validation))]. De cette manière, toutes les entités générées sont déjà préparées pour le classement par binôme... vous n'avez donc pas besoin de créer une classe partielle distincte pour effectuer l'association. Ensuite, vous pouvez créer les classes de jumelage à la main ou éventuellement les générer avec les entités générées par "Microsoft" dans des fichiers distincts ou dans un seul fichier contenant toutes les classes de jumelage. Nous utilisons la même approche que celle que vous avez décrite pour les Self Tracking Entities. Au début, c'est un peu de travail. Mais cela en vaut vraiment la peine. Car vous obtenez des classes solides comme le roc que vous pouvez valider à tout moment : côté client, couche de service, couche d'accès à l'entreprise, etc. Il faut également définir tous les critères de validation à partir de la base de données. Nous avons cherché des moyens de générer ces critères à partir du fichier .edmx, mais nous avons trouvé qu'il était plus intéressant de les spécifier à la main pour une trentaine de classes. Quelques heures de travail, mais après c'est le spectacle ! ;) Probablement moins facile à maintenir que les classes de copains générées et les critères de validation générés automatiquement, mais partout c'est un compromis (passer des jours/semaines à étendre le modèle standard). Bonne chance !

0voto

SnOrfus Points 6457

Oui, il semble que vous soyez en train de créer un service de domaine. Si c'est le cas, lorsque vous créez le service de domaine, il y a une option pour generated associated classes for metadata (en bas de la fenêtre). Le fichier s'appellera votreNomDeServiceDomaine.metadata.cs.

Ce fichier ne comportera pas d'annotations sur les champs, vous devrez donc le faire vous-même.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X