AutoMapper.AutoMapperMappingException
本文关键字:AutoMapperMappingException AutoMapper | 更新日期: 2023-09-27 17:51:15
我知道关于这个话题已经问了很多问题,但是没有一个能回答我的问题。这就是为什么我要创建一个新问题。
我在谷歌和这里寻找答案,并找到了一些改进我的设置的AutoMapper。(即只创建一次映射)
我的问题是,我有时得到异常,有时没有。我完全不知道怎么解它。我已经找了一整天了,什么也没找到。
当我运行Mapper.AssertConfigurationIsValid()时,它成功了。
我试着添加以下内容:
Mapper.Configuration.AllowNullDestinationValues = true;
Mapper.AllowNullDestinationValues = true;
仍然得到错误s
我的设置如下:
在我的全局。我调用AutoMapperSetup.SetupAutoMapper().
protected void Application_Start(object sender, EventArgs e)
{
...
AutoMapperSetup.SetupAutoMapper();
}
AutoMapperSetup类描述如下:(我知道我的静态构造函数正在被执行。如果我设置一个断点,它就会被击中。这样代码就会被执行)
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()
{
}
}
这个在我启动WebServices时被调用。下一步是从DB获取数据并将其映射到我的DTO:
FWSGetPlanningResult resultToReturn = Mapper.Map<GetPlanningResult_v3, FWSGetPlanningResult>(result);
执行上面这行代码会给我映射异常错误。下面是异常的详细信息:
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:
我希望有人能给我解决的办法。正如你在物品的数量上看到的…我并不急于开始手动映射所有的东西。
提前感谢!
我的问题已经解决了。问题如下:
在我们的解决方案中,我们最近开始使用IOC。有人用AutoMapperTypeAdapter作为引用实体创建了一个TypeAdapter。
当我们的应用程序中某个模块被打开或进入时,Automapper被再次初始化,我的映射在global中创建。
在修改我的代码使其也可以使用TypeAdapter后,我的问题就解决了。
谢谢大家对我的帮助!