I know a lot of questions have been asked regarding this topic, but none of them provided an answer for my problem. That's why I'm creating a new question.
I've looked on google and here for answers and have found some which have improved my setup of AutoMapper. (i.e. only creating your mappings only once)
My problem is that I sometimes get the exception and sometimes I don't. And I have absolutely no idea how to solve it. I've been searching a whole day now and I can't find anything.
When I run Mapper.AssertConfigurationIsValid();it succeeds.
I've tried to add the following:
Mapper.Configuration.AllowNullDestinationValues = true;
Mapper.AllowNullDestinationValues = true;
And still I get errors :s
My setup is as follows:
In my global.asax file I call AutoMapperSetup.SetupAutoMapper().
protected void Application_Start(object sender, EventArgs e)
{
...
AutoMapperSetup.SetupAutoMapper();
}
The AutoMapperSetup class is described below: (I do know that my static constructor is getting executed. If I put a breakpoint, it's getting hit. So that code does get executed)
public static class AutoMapperSetup
{
static AutoMapperSetup()
{
#region GetPlanning
Mapper.CreateMap<GetPlanningResult_v3, FWSGetPlanningResult>()
.ForSourceMember(x => x.ItemSelection, y => y.Ignore())
.ForAllMembers(op => op.Condition(x => !x.IsSourceValueNull));
Mapper.CreateMap<ExecutionResult, FWSExecutionResult>()
.ForAllMembers(op => op.Condition(x => !x.IsSourceValueNull));
Mapper.CreateMap<ExecutionResult.Error, FWSExecutionResult.FWSError>()
.ForAllMembers(op => op.Condition(x => !x.IsSourceValueNull));
Mapper.CreateMap<ExecutionResult.Warning, FWSExecutionResult.FWSWarning>()
.ForAllMembers(op => op.Condition(x => !x.IsSourceValueNull));
Mapper.CreateMap<GetPlanningHistoricalSelectionResult_v3, FWSGetPlanningHistoricalSelectionResult>()
.ForAllMembers(op => op.Condition(x => !x.IsSourceValueNull));
Mapper.CreateMap<PlanningResult_v3, FWSPlanningResult>()
.ForAllMembers(op => op.Condition(x => !x.IsSourceValueNull));
Mapper.CreateMap<Anomaly, FWSAnomaly>()
.ForSourceMember(x => x.AnomalyID, y => y.Ignore())
.ForSourceMember(x => x.Dispatcher, y => y.Ignore())
.ForSourceMember(x => x.IsDealed, y => y.Ignore())
.ForSourceMember(x => x.AnomalyDateTime, y => y.Ignore())
.ForSourceMember(x => x.Trip, y => y.Ignore())
.ForSourceMember(x => x.Place, y => y.Ignore())
.ForSourceMember(x => x.Job, y => y.Ignore())
.ForSourceMember(x => x.Product, y => y.Ignore())
.ForSourceMember(x => x.Vehicle, y => y.Ignore())
.ForSourceMember(x => x.Driver, y => y.Ignore())
.ForAllMembers(op => op.Condition(x => !x.IsSourceValueNull));
Mapper.CreateMap<CommentHistoricalResult, FWSCommentHistoricalResult>()
.ForAllMembers(op => op.Condition(x => !x.IsSourceValueNull));
Mapper.CreateMap<IdentifierResult, FWSIdentifierResult>()
.ForSourceMember(x => x.Code, y => y.Ignore())
.ForSourceMember(x => x.ID, y => y.Ignore())
.ForAllMembers(op => op.Condition(x => !x.IsSourceValueNull));
Mapper.CreateMap<IdentifierPerson, FWSIdentifierPerson>()
.ForSourceMember(x => x.LastName, y => y.Ignore())
.ForSourceMember(x => x.FirstName, y => y.Ignore())
.ForAllMembers(op => op.Condition(x => !x.IsSourceValueNull));
Mapper.CreateMap<IdentifierVehicleResult, FWSIdentifierVehicleResult>()
.ForSourceMember(x => x.LicensePlate, y => y.Ignore())
.ForAllMembers(op => op.Condition(x => !x.IsSourceValueNull));
Mapper.CreateMap<TripResult_v3, FWSTripResult>()
.ForSourceMember(x => x.ModificationDate, y => y.Ignore())
.ForSourceMember(x => x.ModificationID, y => y.Ignore())
.ForSourceMember(x => x.ModificationNumber, y => y.Ignore())
.ForSourceMember(x => x.EndDate, y => y.Ignore())
.ForSourceMember(x => x.ExternalSynchStatus, y => y.Ignore())
.ForSourceMember(x => x.CreatedByDriver, y => y.Ignore())
.ForAllMembers(op => op.Condition(x => !x.IsSourceValueNull));
Mapper.CreateMap<Trip, FWSTrip>()
.ForSourceMember(x => x.References, y => y.Ignore())
.ForSourceMember(x => x.TypeCustom, y => y.Ignore())
.ForSourceMember(x => x.CustomNr, y => y.Ignore())
.ForSourceMember(x => x.StartTripAct, y => y.Ignore())
.ForSourceMember(x => x.StopTripAct, y => y.Ignore())
.ForSourceMember(x => x.OrderSeq, y => y.Ignore())
.ForSourceMember(x => x.Overwrite, y => y.Ignore())
.ForAllMembers(op => op.Condition(x => !x.IsSourceValueNull));
Mapper.CreateMap<PlaceResult_v2, FWSPlaceResult>()
.ForSourceMember(x => x.ModificationDate, y => y.Ignore())
.ForSourceMember(x => x.ModificationID, y => y.Ignore())
.ForSourceMember(x => x.ModificationNumber, y => y.Ignore())
.ForSourceMember(x => x.SessionID, y => y.Ignore())
.ForSourceMember(x => x.Export, y => y.Ignore())
.ForSourceMember(x => x.ReadDateTime, y => y.Ignore())
.ForSourceMember(x => x.Format, y => y.Ignore())
.ForSourceMember(x => x.Documents, y => y.Ignore())
.ForSourceMember(x => x.TachoActivities, y => y.Ignore())
.ForSourceMember(x => x.EndDate, y => y.Ignore())
.ForSourceMember(x => x.DriverInfo, y => y.Ignore())
.ForSourceMember(x => x.AlarmDateTime, y => y.Ignore())
.ForSourceMember(x => x.ExternalSynchStatus, y => y.Ignore())
.ForSourceMember(x => x.CreatedByDriver, y => y.Ignore())
.ForSourceMember(x => x.Comments, y => y.Ignore())
.ForAllMembers(op => op.Condition(x => !x.IsSourceValueNull));
Mapper.CreateMap<Place, FWSPlace>()
.ForSourceMember(x => x.References, y => y.Ignore())
.ForSourceMember(x => x.CustomNr, y => y.Ignore())
.ForAllMembers(op => op.Condition(x => !x.IsSourceValueNull));
Mapper.CreateMap<Consultation, FWSConsultation>()
.ForSourceMember(x => x.ModificationDate, y => y.Ignore())
.ForSourceMember(x => x.ConsultationID, y => y.Ignore())
.ForSourceMember(x => x.Vehicle, y => y.Ignore())
.ForSourceMember(x => x.Driver, y => y.Ignore())
.ForSourceMember(x => x.Position, y => y.Ignore())
.ForAllMembers(op => op.Condition(x => !x.IsSourceValueNull));
Mapper.CreateMap<ExtraInfo, FWSExtraInfo>()
.ForSourceMember(x => x.Date, y => y.Ignore())
.ForSourceMember(x => x.InfoID, y => y.Ignore())
.ForSourceMember(x => x.Export, y => y.Ignore())
.ForSourceMember(x => x.Activity, y => y.Ignore())
.ForSourceMember(x => x.Vehicle, y => y.Ignore())
.ForSourceMember(x => x.Driver, y => y.Ignore())
.ForAllMembers(op => op.Condition(x => !x.IsSourceValueNull));
Mapper.CreateMap<Activity, FWSActivity>()
.ForAllMembers(op => op.Condition(x => !x.IsSourceValueNull));
Mapper.CreateMap<PlaceIdentifier, FWSPlaceIdentifier>()
.ForAllMembers(op => op.Condition(x => !x.IsSourceValueNull));
Mapper.CreateMap<TripIdentifier, FWSTripIdentifier>()
.ForAllMembers(op => op.Condition(x => !x.IsSourceValueNull));
Mapper.CreateMap<Position, FWSPosition>()
.ForAllMembers(op => op.Condition(x => !x.IsSourceValueNull));
Mapper.CreateMap<PlanningItem, FWSPlanningItem>()
.ForAllMembers(op => op.Condition(x => !x.IsSourceValueNull));
Mapper.CreateMap<GeofencingResult, FWSGeofencingResult>()
.ForAllMembers(op => op.Condition(x => !x.IsSourceValueNull));
Mapper.CreateMap<Geofencing, FWSGeofencing>()
.ForAllMembers(op => op.Condition(x => !x.IsSourceValueNull));
Mapper.CreateMap<Comment, FWSComment>()
.ForAllMembers(op => op.Condition(x => !x.IsSourceValueNull));
Mapper.CreateMap<JobResult_v2, FWSJobResult>()
.ForSourceMember(x => x.Author, y => y.Ignore())
.ForSourceMember(x => x.Export, y => y.Ignore())
.ForSourceMember(x => x.CreatedbyDriver, y => y.Ignore())
.ForSourceMember(x => x.ExternalSynchStatus, y => y.Ignore())
.ForSourceMember(x => x.Transfer, y => y.Ignore())
.ForSourceMember(x => x.CancelStatus, y => y.Ignore())
.ForSourceMember(x => x.ModificationDate, y => y.Ignore())
.ForSourceMember(x => x.ModificationID, y => y.Ignore())
.ForSourceMember(x => x.ModificationNumber, y => y.Ignore())
.ForAllMembers(op => op.Condition(x => !x.IsSourceValueNull));
Mapper.CreateMap<ProductResult_v2, FWSProductResult>()
.ForSourceMember(x => x.ModificationDate, y => y.Ignore())
.ForSourceMember(x => x.ModificationID, y => y.Ignore())
.ForSourceMember(x => x.ModificationNumber, y => y.Ignore())
.ForSourceMember(x => x.Format, y => y.Ignore())
.ForSourceMember(x => x.ProductType, y => y.Ignore())
.ForSourceMember(x => x.Export, y => y.Ignore())
.ForSourceMember(x => x.Transfer, y => y.Ignore())
.ForSourceMember(x => x.ExternalSynchStatus, y => y.Ignore())
.ForSourceMember(x => x.CreatedByDriver, y => y.Ignore())
.ForSourceMember(x => x.TnrPlace, y => y.Ignore())
.ForAllMembers(op => op.Condition(x => !x.IsSourceValueNull));
Mapper.CreateMap<Job, FWSJob>()
.ForSourceMember(x => x.OrderSeq, y => y.Ignore())
.ForSourceMember(x => x.DriverDisplay, y => y.Ignore())
.ForSourceMember(x => x.Comment, y => y.Ignore())
.ForSourceMember(x => x.CustomNr, y => y.Ignore())
.ForAllMembers(op => op.Condition(x => !x.IsSourceValueNull));
Mapper.CreateMap<Product, FWSProduct>()
.ForSourceMember(x => x.References, y => y.Ignore())
.ForSourceMember(x => x.CustomNr, y => y.Ignore())
.ForAllMembers(op => op.Condition(x => !x.IsSourceValueNull));
Mapper.CreateMap<ViaRouteItemResult, FWSViaRouteItemResult>()
.ForAllMembers(op => op.Condition(x => !x.IsSourceValueNull));
Mapper.CreateMap<Customer, FWSCustomer>()
.ForAllMembers(op => op.Condition(x => !x.IsSourceValueNull));
Mapper.CreateMap<Shipper, FWSShipper>()
.ForAllMembers(op => op.Condition(x => !x.IsSourceValueNull));
Mapper.CreateMap<ActivityPlace, FWSActivityPlace>()
.ForAllMembers(op => op.Condition(x => !x.IsSourceValueNull));
Mapper.CreateMap<Transfer, FWSTransfer>()
.ForSourceMember(x => x.SendDateTime, y => y.Ignore())
.ForSourceMember(x => x.TransferCancelID, y => y.Ignore())
.ForSourceMember(x => x.TransferDateTime, y => y.Ignore())
.ForSourceMember(x => x.TransferID, y => y.Ignore())
.ForAllMembers(op => op.Condition(x => !x.IsSourceValueNull));
Mapper.CreateMap<enumPlanningStatus, FWSEnumPlanningStatus>()
.ForAllMembers(op => op.Condition(x => !x.IsSourceValueNull));
Mapper.CreateMap<enumSynchronisationStatus, FWSEnumSynchronisationStatus>()
.ForAllMembers(op => op.Condition(x => !x.IsSourceValueNull));
Mapper.CreateMap<enumCancelStatus, FWSEnumCancelStatus>()
.ForAllMembers(op => op.Condition(x => !x.IsSourceValueNull));
Mapper.CreateMap<enumTransferStatus, FWSEnumTransferStatus>()
.ForAllMembers(op => op.Condition(x => !x.IsSourceValueNull));
Mapper.CreateMap<enumGeoFencingEventType, FWSenumGeoFencingEventType>()
.ForAllMembers(op => op.Condition(x => !x.IsSourceValueNull));
Mapper.CreateMap<enumPositionFormat, FWSenumPositionFormat>()
.ForAllMembers(op => op.Condition(x => !x.IsSourceValueNull));
#endregion
#region InsertUpdatePlanning
Mapper.CreateMap<FWSPlanningInsert, PlanningInsert>();
Mapper.CreateMap<FWSPlanning, Planning>();
Mapper.CreateMap<FWSTripInsert, TripInsert>()
.ForMember(x => x.References, y => y.Ignore())
.ForMember(x => x.TypeCustom, y => y.Ignore())
.ForMember(x => x.CustomNr, y => y.Ignore())
.ForMember(x => x.StartTripAct, y => y.Ignore())
.ForMember(x => x.StopTripAct, y => y.Ignore())
.ForMember(x => x.OrderSeq, y => y.Ignore())
.ForMember(x => x.Overwrite, y => y.Ignore());
Mapper.CreateMap<FWSTrip, Trip>()
.ForMember(x => x.References, y => y.Ignore())
.ForMember(x => x.TypeCustom, y => y.Ignore())
.ForMember(x => x.CustomNr, y => y.Ignore())
.ForMember(x => x.StartTripAct, y => y.Ignore())
.ForMember(x => x.StopTripAct, y => y.Ignore())
.ForMember(x => x.OrderSeq, y => y.Ignore())
.ForMember(x => x.Overwrite, y => y.Ignore());
Mapper.CreateMap<FWSPlaceInsert, PlaceInsert>()
.ForMember(x => x.References, y => y.Ignore())
.ForMember(x => x.CustomNr, y => y.Ignore());
Mapper.CreateMap<FWSPlace, Place>()
.ForMember(x => x.References, y => y.Ignore())
.ForMember(x => x.CustomNr, y => y.Ignore());
Mapper.CreateMap<FWSJobInsert, JobInsert>()
.ForMember(x => x.OrderSeq, y => y.Ignore())
.ForMember(x => x.DriverDisplay, y => y.Ignore())
.ForMember(x => x.Comment, y => y.Ignore())
.ForMember(x => x.CustomNr, y => y.Ignore());
Mapper.CreateMap<FWSJob, Job>()
.ForMember(x => x.OrderSeq, y => y.Ignore())
.ForMember(x => x.DriverDisplay, y => y.Ignore())
.ForMember(x => x.Comment, y => y.Ignore())
.ForMember(x => x.CustomNr, y => y.Ignore());
Mapper.CreateMap<FWSProductInsert, ProductInsert>()
.ForMember(x => x.References, y => y.Ignore())
.ForMember(x => x.CustomNr, y => y.Ignore());
Mapper.CreateMap<FWSProduct, Product>()
.ForMember(x => x.References, y => y.Ignore())
.ForMember(x => x.CustomNr, y => y.Ignore());
Mapper.CreateMap<FWSIdentifier, Identifier>();
Mapper.CreateMap<FWSIdentifierVehicle, IdentifierVehicle>();
Mapper.CreateMap<FWSIdentifierSite, IdentifierSite>();
Mapper.CreateMap<FWSenumIdentifierType, enumIdentifierType>();
Mapper.CreateMap<FWSenumIdentifierVehicleType, enumIdentifierVehicleType>();
Mapper.CreateMap<FWSenumIdentifierSiteType, enumIdentifierSiteType>();
Mapper.CreateMap<FWSReference, Reference>();
Mapper.CreateMap<FWSActivity, Activity>();
Mapper.CreateMap<FWSGeofencing, Geofencing>();
Mapper.CreateMap<FWSPosition, Position>();
Mapper.CreateMap<FWSIdentifierViaRoute, IdentifierViaRoute>();
Mapper.CreateMap<FWSViaPointInsert, ViaPointInsert>();
Mapper.CreateMap<FWSViaPoint, BusinessFramework.Data.ViaRoute.ViaPoint>();
Mapper.CreateMap<FWSViaRouteInsert, ViaRouteInsert>();
Mapper.CreateMap<FWSViaRoute, ViaRoute>();
Mapper.CreateMap<FWSActivityPlace, ActivityPlace>();
Mapper.CreateMap<FWSenumGeoFencingEventType, enumGeoFencingEventType>();
Mapper.CreateMap<FWSenumPositionFormat, enumPositionFormat>();
Mapper.CreateMap<FWSReferenceProduct, ReferenceProduct>();
Mapper.CreateMap<FWSenumIdentifierViaRouteType, enumIdentifierViaRouteType>();
Mapper.CreateMap<FWSenumViaRouteType, enumViaRouteType>();
Mapper.CreateMap<FWSenumViaRoutePlanningType, enumViaRoutePlanningType>();
Mapper.CreateMap<FWSIdentifierAddress, IdentifierAddress>();
Mapper.CreateMap<FWSenumIdentifierAddressType, enumIdentifierAddressType>();
Mapper.CreateMap<FWSCustomer, Customer>();
Mapper.CreateMap<FWSShipper, Shipper>();
#endregion
#region InsertUpdateSettings
Mapper.CreateMap<FWSUpdateInsertSettings, UpdateInsertSettings>();
#endregion
#region Cancel Planning
Mapper.CreateMap<FWSPlanningItemSelection, PlanningItemSelection>();
#endregion
}
public static void SetupAutoMapper()
{
}
}
This gets called when I start my WebServices. The next step is to get the data from DB and map this to my DTO:
FWSGetPlanningResult resultToReturn = Mapper.Map<GetPlanningResult_v3, FWSGetPlanningResult>(result);
Executing the above line of code is giving me the mapping exception error. Below the details of the exception:
AutoMapper.AutoMapperMappingException occurred
HResult=-2146233088
Message=Missing type map configuration or unsupported mapping.
Mapping types:
GetPlanningResult_v3 -> FWSGetPlanningResult
BusinessFramework.Data.Planning.Result.GetPlanningResult_v3 -> BusinessFramework.Data.Planning.FWSGetPlanningResult
Destination path:
FWSGetPlanningResult
Source value:
BusinessFramework.Data.Planning.Result.GetPlanningResult_v3
Source=AutoMapper
StackTrace:
at Desktop.Web.Fleet.DBFactory.ConvertFromGetPlanningResult(GetPlanningResult_v3 result) in c:\TFSProjects\Tx-Framework\Framework\Main\Source\BusinessFramework\Services.Fleet\Classes\DB\Factories\Planning.cs:line 593
InnerException:
I hope that someone might give me the solution.. As you can see on the number of objects.. I'm not that eager to start mapping everything manually.
Thanks in advance!
My problem has been fixed. The problem was the following:
In our solution we recently started working with IOC. Someone created a TypeAdapter with AutoMapperTypeAdapter as referenced entity.
When in our application a certain module was open or entered, Automapper was being initialized again and my mappings created in global.asax were removed.
After modifying my code to also work using the TypeAdapter, my problem was fixed.
Thanks for everying trying to help me!