2010-07-23 9 views
0

Gurus salutation,Automapper: Comment mapper un type qui est conditionnel?

Donc, fondamentalement, j'ai une carte que j'ai configuré pour une utilisation pour TripFeeSchedule, calendrier des frais de voyage est un type IEnumerable. J'essaie de cartographier cela, donc je n'ai pas besoin d'avoir 5 ValueResolvers, et je suis coincé.

Ce que je veux essentiellement faire est de cartographier un type de frais OPtional à partir d'un barème de frais unique. Donc, par exemple, si le type est une taxe tardive, je veux mapper ce type spécifique avec le prix et les frais étant récupérés et affichés judicieusement. Parce que ces frais ne sont pas toujours là, j'essaie de rendre cela aussi simple que possible.

Mapper.CreateMap<Trip, TripManagementViewModelCreateEdit>().ForMember(dto => dto.TripOverride, opt => opt.ResolveUsing<TripCompResolver>().FromMember(x => x.TripComp)) 
.ForMember(dto => dto.BusOverride, opt => opt.ResolveUsing<TripCompResolver>().FromMember(x => x.TransportComp)).ForMember(dto => dto.RentalSki, opt => opt.MapFrom<TripFeeSchedule>(x=> x.ScheduledFees.First())); 

ScheduledFees meurt sur moi, dit Object Not Refrenced.

Je la carte et il semble fonctionner (débogueur montre que son être appelé)

[NullReferenceException:. Référence d'objet non définie à une instance d'un objet] AutoMapper.Mappers.PropertyMapMappingStrategy.MapPropertyValue (ResolutionContext contexte, IMappingEngineRunner mappeur, objet mappedObject, PropertyMap PropertyMap) +393 AutoMapper.Mappers.PropertyMapMappingStrategy.Map (contexte ResolutionContext, IMappingEngineRunner mappeur) +309 AutoMapper.Mappers.TypeMapMapper.Map (contexte ResolutionContext, IMappingEngineRunner mappeur) +221 AutoMapper .MappingEngine.AutoMapper.IMappingEngineRunner.Map (Contexte ResolutionContext) +723

[AutoMapperMappingException: Trying to map FreeLivinEnertainment.Core.TripFeeSchedule to FreeLivinEnertainment.Core.ViewModels.OptionalFee. 
Using mapping configuration for FreeLivinEnertainment.Core.TripFeeSchedule to FreeLivinEnertainment.Core.ViewModels.OptionalFee 
Destination property: RentalSki 
Exception of type 'AutoMapper.AutoMapperMappingException' was thrown.] 
    AutoMapper.MappingEngine.AutoMapper.IMappingEngineRunner.Map(ResolutionContext context) +811 
    AutoMapper.Mappers.PropertyMapMappingStrategy.MapPropertyValue(ResolutionContext context, IMappingEngineRunner mapper, Object mappedObject, PropertyMap propertyMap) +601 

[AutoMapperMappingException: Trying to map FreeLivinEnertainment.Core.TripFeeSchedule to FreeLivinEnertainment.Core.ViewModels.OptionalFee. 
Using mapping configuration for FreeLivinEnertainment.Core.TripFeeSchedule to FreeLivinEnertainment.Core.ViewModels.OptionalFee 
Destination property: RentalSki 
Exception of type 'AutoMapper.AutoMapperMappingException' was thrown.] 
    AutoMapper.Mappers.PropertyMapMappingStrategy.MapPropertyValue(ResolutionContext context, IMappingEngineRunner mapper, Object mappedObject, PropertyMap propertyMap) +699 
    AutoMapper.Mappers.PropertyMapMappingStrategy.Map(ResolutionContext context, IMappingEngineRunner mapper) +309 
    AutoMapper.Mappers.TypeMapMapper.Map(ResolutionContext context, IMappingEngineRunner mapper) +221 
    AutoMapper.MappingEngine.AutoMapper.IMappingEngineRunner.Map(ResolutionContext context) +723 

[AutoMapperMappingException: Trying to map FreeLivinEnertainment.Core.Trip to FreeLivinEnertainment.Core.ViewModels.TripManagementViewModelCreateEdit. 
Using mapping configuration for FreeLivinEnertainment.Core.Trip to FreeLivinEnertainment.Core.ViewModels.TripManagementViewModelCreateEdit 
Exception of type 'AutoMapper.AutoMapperMappingException' was thrown.] 
    AutoMapper.MappingEngine.AutoMapper.IMappingEngineRunner.Map(ResolutionContext context) +811 
    AutoMapper.MappingEngine.Map(Object source, Type sourceType, Type destinationType) +132 
    AutoMapper.MappingEngine.Map(TSource source) +150 
    AutoMapper.Mapper.Map(TSource source) +117 
    FreeLivinEnertainment.Web.Controllers.Admin.TripsController.ShowEditTrip(Int32 id) in D:\Projects\jimbo\app\FreeLivinEnertainment.Web.Controllers\Controllers\Admin\TripManagementController.cs:138 
    lambda_method(ExecutionScope , ControllerBase , Object[]) +79 
    System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +17 
    System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +178 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +24 
    System.Web.Mvc.<>c__DisplayClassd.<InvokeActionMethodWithFilters>b__a() +52 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +254 
    System.Web.Mvc.<>c__DisplayClassf.<InvokeActionMethodWithFilters>b__c() +19 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +254 
    System.Web.Mvc.<>c__DisplayClassf.<InvokeActionMethodWithFilters>b__c() +19 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +192 
    System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +314 
    System.Web.Mvc.Controller.ExecuteCore() +105 
    System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +39 
    System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +7 
    System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__4() +34 
    System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +21 
    System.Web.Mvc.Async.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) +12 
    System.Web.Mvc.Async.WrappedAsyncResult`1.End() +59 
    System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +44 
    System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +7 
    System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8679150 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155 

Répondre

0

cernées comment faire, je me sens comme un crétin, je suppose que je peux exécuter le lambda sur le membre De et je peux faire ce que je dois retourner le résultat.

opt => opt.ResolveUsing().FromMember(x => x.ScheduledFees.First()