2017-09-07 1 views
0

En utilisant OData avec noyau Automapper et EF pour exposer le modèle de données ci-dessous,Réduire db appeler l'extension Automapper

  1. client
  2. CustomerMetric: CustomerLevel, VIPFlag, d'autres domaines ...

Le client a une relation à plusieurs avec CustomerMetric. L'objectif est de permettre au contrôleur client d'exposer CustomerLevel, VIPFlag dans la première ligne correspondante de la table CustomerMetric.

Ce que je l'ai fait dans la configuration de la carte,

  • .ForMember (dest => dest.CustomerLevel, opt => opt.MapFrom (src => src.CustomerMetric.FirstOrDefault(). Niveau))
  • .ForMember (dest => dest.VIPFlag, opt => opt.MapFrom (src => src.CustomerMetric.FirstOrDefault(). VIPFlag))

tout cela est bon, les valeurs sont remplis correctement. Toutefois, automapper déclenche deux appels à la base de données, avec 'select top 1 CustomerLevel' et un autre avec 'select top 1 VIPFlag'.

Comment rendre possible avec un appel d'aller chercher les deux champs plutôt que deux appels pour chaque champ individuel? J'ai essayé. Inclure sur le contrôleur il ne fonctionne pas ..

Merci!

Répondre

0

Vous pouvez essayer de regrouper ces deux dans une structure ou une classe, puis de mapper l'ensemble. Cela fonctionnerait dans EF6, je ne suis pas sûr du noyau EF. Voir this.