亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

AutoMapper:“忽略其余的”?

AutoMapper:“忽略其余的”?

慕哥9229398 2019-07-25 20:04:11
AutoMapper:“忽略其余的”?有沒有辦法告訴AutoMapper忽略除明確映射的屬性之外的所有屬性?我有外部DTO類可能會從外部更改,我想避免指定要顯式忽略的每個屬性,因為添加新屬性會在嘗試將它們映射到我自己的對象時破壞功能(導致異常)。
查看完整描述

3 回答

?
紅糖糍粑

TA貢獻1815條經驗 獲得超6個贊

我已經更新了Can Gencer的擴展,不會覆蓋任何現有的地圖。

public static IMappingExpression<TSource, TDestination> 
    IgnoreAllNonExisting<TSource, TDestination>(this IMappingExpression<TSource, TDestination> expression){
    var sourceType = typeof (TSource);
    var destinationType = typeof (TDestination);
    var existingMaps = Mapper.GetAllTypeMaps().First(x => x.SourceType.Equals(sourceType) && x.DestinationType.Equals(destinationType));
    foreach (var property in existingMaps.GetUnmappedPropertyNames())
    {
        expression.ForMember(property, opt => opt.Ignore());
    }
    return expression;}

用法:

Mapper.CreateMap<SourceType, DestinationType>()
                .ForMember(prop => x.Property, opt => opt.MapFrom(src => src.OtherProperty))
                .IgnoreAllNonExisting();


查看完整回答
反對 回復 2019-07-25
?
慕婉清6462132

TA貢獻1804條經驗 獲得超2個贊

根據我的理解,問題是目標上的字段在源中沒有映射字段,這就是為什么要尋找忽略那些非映射目標字段的方法。

您可以簡單地使用,而不是實現和使用這些擴展方法

Mapper.CreateMap<destinationModel, sourceModel>(MemberList.Source);

現在,automapper知道它只需要驗證所有源字段是否已映射,而不是相反。

您還可以使用:

Mapper.CreateMap<destinationModel, sourceModel>(MemberList.Destination);


查看完整回答
反對 回復 2019-07-25
  • 3 回答
  • 0 關注
  • 1704 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號