Question

J'ai 4 application web en couches programmé en C # .Net 4.0 ...:

  • couche interface utilisateur
  • couche d'affaires
  • couche d'accès aux données
  • couche d'entités

Ma couche de données contient un edmx Ma couche d'entités contient mes objets POCO (générés par un script t4), et que la couche est référencée dans toutes les autres couches.

Lors de la création d'une forme MVC pour créer un nouveau client, par exemple .... J'ai déjà la classe client avec des champs pour le prénom, le nom, etc dans ma couche d'entités, mais cette classe auto-générée POCO qui ne fonctionne pas ont des annotations de données pour la validation ... IE [Obligatoire], etc. lorsque le formulaire est soumis

Ma solution est en ce moment pour créer de nouvelles classes de modèles qui sont à peu près les mêmes que mes cours poco mais aussi ces annotations de validation supplémentaires.

Ce que je veux savoir est s'il y a un moyen facile d'utiliser certains objets POCO dans le modèle MVC (dans la couche d'interface utilisateur) sans avoir à presque récrire la classe ... et aussi sans modifier les feuillets T4 qui génère ces classes POCO (puisque je ne suis pas à la vitesse sur t4).

J'ai vu depuis un autre poste sur stackoverflow http://automapper.codeplex.com/ .. . ne sais pas si cela fera ou est la meilleure solution.

Était-ce utile?

La solution

Modification d'un modèle T4 est pas très difficile du tout. J'ai récemment fait face à la même question et a décidé de lire sur T4 un peu et puis modifier le modèle pour créer les propriétés générées la façon dont je les ai besoin (annotations, et dans mon cas avec NotifyPropertyChange etc. comme je l'utilise même POCO objets dans un MVC interface utilisateur et une interface utilisateur Silverlight).

Même si vous êtes à la recherche d'une solution qui ne ont pas besoin de modifier T4, j'espère que cela est utile.

Autres conseils

Si votre classe poco est déclarée en tant que telle:

public class Person {
    public string FirstName { get; set; }
    public string LastName  { get; set; }
}

alors si vous changez juste le T4 pour en faire une classe partielle, vous pouvez alors définir dans un fichier séparé:

[MetadataType(typeof(PersonMetadata))]
public partial class Person {

    internal class PersonMetadata {

        [Required]
        // insert other metadata here
        public string FirstName { get; set; }

        // and if you don't want metadata for lastname, you can leave it out
    }
}

Deux points supplémentaires - la classe de métadonnées n'a pas à être emboîtée dans la partie que vous définissez, je pense qu'il est bien plus propre. En outre, les types ne doivent pas correspondre à la classe de métadonnées, de sorte que vous pouvez les faire tous les objets si vous voulez (et vous pouvez voir quelques exemples sur le web avec comme ceci)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top