2009-09-17 7 views
4

Je suis mappage de mes entités générées Linq-To-SQL à DTO en utilisant AutoMapper.Comment désactiver la conversion automatique de la liste AutoMapper entre la liste <T> et EntitySet <T>?

Lorsque j'ai d'abord créé les tests unitaires, j'avais des cartes spécifiques (par une classe de configuration statique) mis en place pour convertir un type de EntitySet à une liste générique (et vice-versa)

Mapper.CreateMap<EntitySet<Member>, List<MemberDTO>>(); 
Mapper.CreateMap<List<MemberDTO>, EntitySet<Member>>(); 

Lors du retrait les conversions de liste (en calculant qu'AutoMapper les convertira automatiquement), mes tests unitaires ont quand même fonctionné, mais ils ont ralenti à un crawl. Il était si lent, il a fallu littéralement une minute pour effectuer chaque test. Après avoir rajouté les mappages de liste, les tests unitaires ont repris leurs vitesses de performance normales.

Existe-t-il un moyen de désactiver cette conversion automatique pour les listes, de sorte que je doive mapper les conversions de ma liste? Je voudrais qu'il lance une exception AutoMapperException si je ne parviens pas à inclure une carte. J'aimerais éviter ces problèmes de performances.

Si le pire se produit, je finirais par écrire un modèle de génération de code rapide pour créer automagiquement ma classe de configuration de mappage basée sur les DTO. De cette façon, je ne manquerai de rien.

Merci.

+1

Pas une réponse à votre question, mais un commentaire: Vous pouvez également tester le temps d'exécution. Si vous craignez d'oublier accidentellement une telle conversion et de livrer une application qui est lente en un point, vous pouvez ajouter un paramètre Timeout qui échoue au test s'il exécute plus de X secondes. –

+0

Merci pour le conseil! – CitizenBane

Répondre

1

Tout appel CreateMap ne doit pas se produire plus d'une fois par AppDomain, ce qui inclut les tests et le code de production. Nous avons la nôtre dans une méthode statique, double-contrôle verrouillé pour s'assurer que la configuration ne se produit qu'une seule fois. La configuration est mise en cache de manière statique, il n'est donc pas nécessaire de le faire plus d'une fois. Cependant, ces conversions devraient "juste fonctionner", en supposant que vous avez mis en place les cartes Membre -> MemberDTO et vice versa. Je vais faire quelques tests de fumée pour la liste <> -> EntitySet <> pour m'assurer que tout fonctionne correctement.

+0

Merci, je n'étais pas sûr si je devais convertir les choses comme je l'ai fait ci-dessus. Les conversions font "juste du travail", c'est juste que si je ne crée pas initialement une carte, c'est beaucoup plus lent. – CitizenBane

+0

Ok, donc je dois créer les cartes vice-versa - putain, j'ai besoin de plus de café. – CitizenBane

+0

Alors, cette conversion "fonctionne-t-elle" peut-elle être désactivée ou non? – CitizenBane

0

Il s'avère que vous ne pouvez pas arrêter la conversion automatique. J'ai regardé à peu près partout, et il semble n'y avoir aucun moyen réel de le faire.

En attendant, j'écris tous les mappings à la main.

Questions connexes