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

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

AutoMapper:直接映射到子對象目標字段未按預期工作

AutoMapper:直接映射到子對象目標字段未按預期工作

C#
慕雪6442864 2022-11-13 14:28:03
我看到 AutoMapper 有一些奇怪的行為,當目標字段位于子對象中時,我無法直接映射源字段和目標字段。相反,我需要將源字段包裝在方法調用中,該方法調用檢查該字段是否為空。如果不為null,則返回該值,否則返回null。不得不這樣做似乎是不對的。特別是因為映射到根對象上的目標字段不需要這種黑客攻擊。公平地說,我不確定問題出在 AutoMapper 上??赡苁?EntityFramework Core 的問題。但是,從表面上看,它看起來像是一個 AutoMapper 問題。由于對知識產權的擔憂,如果問題被發現,我無法分享代碼。因此,我編寫了一個工作示例,它盡可能接近原始代碼,并且顯示出相同的問題。它可以在https://github.com/BurikkuDeibu/BrickApi找到。主分支有我認為應該的代碼。UseMagicMethods分支具有使事情正常進行所需的黑客代碼。UseMagicMethods分支中真正感興趣的文件是https://github.com/BurikkuDeibu/BrickApi/blob/UseMagicMethods/src/WebApi/Models/ElementDetailsMapper.cs從主分支(拋出異常):    public class ElementDetailsMapper    {        public class ElementDetailsProfile : Profile        {            public ElementDetailsProfile()            {                CreateMap<ElementDetailEntity, RGBDetail>()                    .ForMember(dest => dest.R, opts => opts.MapFrom(src => src.Red))                    .ForMember(dest => dest.G, opts => opts.MapFrom(src => src.Green))                    .ForMember(dest => dest.B, opts => opts.MapFrom(src => src.Blue));                CreateMap<ElementDetailEntity, ColorDetail>()                    .ForMember(dest => dest.RGB, opts => opts.MapFrom(src => src))                    .ForMember(dest => dest.Id, opts => opts.MapFrom(src => src.ColorId))                    .ForMember(dest => dest.Name, opts => opts.MapFrom(src => src.Color))                    .ForMember(dest => dest.IsTranparent, opts => opts.MapFrom(src => src.Transparent))                    .ForMember(dest => dest.IsMetaliic, opts => opts.MapFrom(src => src.Metallic));                CreateMap<ElementDetailEntity, DesignDetail>()                    .ForMember(dest => dest.Id, opts => opts.MapFrom(src => src.DesignId))                    .ForMember(dest => dest.Name, opts => opts.MapFrom(src => src.Design));            }        }    }
查看完整描述

1 回答

?
慕桂英3389331

TA貢獻2036條經驗 獲得超8個贊

簡短的回答是,因為我使用的是ProjectTo方法,所以在翻譯查詢方面,我依賴于 EntityFramework Core 支持的內容。在這一點上,它不支持我試圖做的事情。

...

根據上面的評論,我嘗試了一些事情。

我嘗試從ProjectTo切換到Map,這似乎工作得很好。這是我們決定采用的方法,這樣我們就可以消除魔法方法。

我還嘗試使用視圖而不是存儲過程。這也有效,但它讓我們的 DBA 非常不高興。

我還嘗試為我的存儲過程結果使用查詢類型而不是實體類型。這沒有區別。如果沒有魔術方法,我仍然會得到 NullReference 異常。


查看完整回答
反對 回復 2022-11-13
  • 1 回答
  • 0 關注
  • 118 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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