5

このトピックに関して多くの質問が寄せられていることは知っていますが、どれも私の問題に対する答えを提供していません. そのため、新しい質問を作成しています。

私はグーグルとここで答えを探し、AutoMapperのセットアップを改善したものをいくつか見つけました。(つまり、マッピングを一度だけ作成します)

私の問題は、例外が発生する場合と発生しない場合があることです。そして、私はそれを解決する方法がまったくわかりません。私は丸一日探していましたが、何も見つかりません。

Mapper.AssertConfigurationIsValid(); を実行すると成功します。

私は以下を追加しようとしました:

Mapper.Configuration.AllowNullDestinationValues = true;
Mapper.AllowNullDestinationValues = true;  

それでもエラーが発生します:s

私のセットアップは次のとおりです。

私の global.asax ファイルでは、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: 

誰かが私に解決策を教えてくれることを願っています..オブジェクトの数でわかるように..すべてを手動でマッピングすることに熱心ではありません。

前もって感謝します!

4

1 に答える 1

3

私の問題は修正されました。問題は次のとおりでした。

私たちのソリューションでは、最近 IOC との連携を開始しました。AutoMapperTypeAdapter を参照エンティティとして使用して、誰かが TypeAdapter を作成しました。

私たちのアプリケーションで特定のモジュールが開かれたり入力されたりすると、Automapper が再び初期化され、global.asax で作成されたマッピングが削除されました。

TypeAdapter を使用しても機能するようにコードを変更した後、問題は修正されました。

私を助けてくれてありがとう!

于 2013-01-11T14:53:37.850 に答える