亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

基礎才是重中之重~AutoMapper為已有目標對象映射

2019-11-14 13:46:41
字體:
來源:轉載
供稿:網友

回到目錄

AutoMapper各位一定不會陌生,大叔之前的文章中也提到過,曾經也寫過擴展方法,以方便程序開發人員去使用它,而在最近,大叔在一個API項目里,在一個POST請求由DTO對象為實體對象賦值時,出現了一個問題,使用大叔不得不對原有擴展方法再進行二次的補充。

事情是這樣的,有一個DTO對象RequestUserInfo和一個數據庫實體對象UserInfo,在進行POST時,將RequestUserInfo對象的值需要賦給UserInfo對象,我們知道DTO對象是根據接口要求從UserInfo里提取的,它的屬性要少于UserInfo,這在GET請求時,沒有出現任何問題(由userinfo到RequestUserInfo的映射),把對應的屬性值賦到了DTO對象上面,百在POST時,由于DTO對象的屬性少,所以,UserInfo的某些屬性沒有被賦到值,出現了Null。

   /// <summary>    /// DTO 用戶-請求參數    /// 輸入參數各屬性都是可空的,為空時不去驗證,并且查詢時不去構造查詢條件    /// </summary>    public class RequestUserInfo : RequestBase    {        public int? Id { get; set; }        [MaxLength(10, ErrorMessage = "用戶名最多為10個字符")]        public string UserName { get; set; }        [EmailAddress(ErrorMessage = "Email地址不是合法的")]        public string Email { get; set; }        [MaxLength(20, ErrorMessage = "用戶名最多為20個字符")]        public string RealName { get; set; }    }
    public class UserInfo : Entity    {        [DisplayName("用戶名"), Required]// StringLength(50, MinimumLength = 4, ErrorMessage = "用戶名只能由~50個字符組成")        public string UserName { get; set; }        [DisplayName("真實姓名"), Required]//StringLength(30, MinimumLength = 6, ErrorMessage = "真實姓名只能由6~30個字符組成")        public string RealName { get; set; }        [DisplayName("密碼"), Required]// StringLength(20, MinimumLength = 6, ErrorMessage = "密碼由6~20個字符組成")        public string PassWord { get; set; }        [DisplayName("電子郵件"), Required, EmailAddress]        public string Email { get; set; }    }

以上是兩個對象的內容,在AutoMapper的概念里,在GET請求時,UserInfo相當于TSource源對象,RequestUserInfo相當于TResult目標對象,而在POST請求時,這個正好相反,所以我們之前定義的擴展方法就有問題了,它會將UserInfo里的某些屬性變成null,這是正常的,因為在進行AutoMapper時,如果你不給它傳目標對象,它會自動構建一個新對象。

擴展之前的方法,它AutoMapper支持為已有目標對象賦值

 

        /// <summary>        /// 為已經存在的對象進行automapper        /// </summary>        /// <typeparam name="TSource"></typeparam>        /// <typeparam name="TResult"></typeparam>        /// <param name="self"></param>        /// <param name="result"></param>        /// <returns></returns>        public static TResult MapTo<TResult>(this object self, TResult result)        {            if (self == null)                throw new ArgumentNullException();            Mapper.CreateMap(self.GetType().UnderlyingSystemType, typeof(TResult));            return (TResult)Mapper.Map(self, result, self.GetType(), typeof(TResult));        }

 

這樣在程序調用時,會把已經存在的對象result以參數的形式傳入,如下代碼

   public void Update(RequestUserInfo request)        {            var entity = userRepository.GetModel().FirstOrDefault(i => i.Id == request.Id);            request.MapTo<UserInfo>(entity);            userRepository.Update(entity);        }

這時entity是從數據庫里拿出來的完整數據,再把它的DTO屬性進行自動映射賦值,最后把賦值后的對象進行更新!

上面是EF,LINQ這些ORM工具里的通用作法,即先拿出對象,再為指定屬性賦新的值,最后提交到數據庫!

感謝您的閱讀!

回到目錄

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91国自产精品中文字幕亚洲| 97超碰国产精品女人人人爽| 伊人久久久久久久久久久| 亚洲精品影视在线观看| 欧美人与性动交| 国产精品一区二区久久久| 亚洲一级黄色片| 国产精品电影在线观看| 自拍偷拍亚洲在线| 欧美在线一区二区三区四| 亚洲欧美一区二区三区久久| 精品视频久久久久久久| 日韩福利视频在线观看| 91色视频在线观看| 亚洲第一网站男人都懂| 亚洲成人1234| 亚洲国产日韩欧美在线99| 国产成人免费av| 一本色道久久88综合日韩精品| 欧洲成人午夜免费大片| 欧美亚洲在线视频| 2020久久国产精品| 成人av在线天堂| 欧美成人激情图片网| 欧美高清视频一区二区| 成人免费视频a| 欧美激情在线播放| 欧美激情国内偷拍| 欧美日韩第一页| 精品国产精品自拍| 亚洲国产天堂久久综合| 国产精品直播网红| 欧美激情视频一区二区三区不卡| 久久精品国产亚洲精品| 国产在线精品一区免费香蕉| 黄色精品在线看| 亚洲人成在线一二| 欧美日韩免费网站| 久久久久亚洲精品国产| 欧美精品18videos性欧| 精品国模在线视频| 国产亚洲欧美日韩精品| 亚洲自拍高清视频网站| 久久精品亚洲精品| 久久久久久999| 欧美日韩精品二区| 欧美黑人性生活视频| 国产成人精品久久久| 国产精品美乳一区二区免费| 国产999精品视频| 中文日韩电影网站| 国产精品三级网站| 国产精品成人品| 欧美乱妇高清无乱码| 97精品一区二区视频在线观看| 国产成人精品视频在线| 成人www视频在线观看| 一本色道久久88综合亚洲精品ⅰ| 91tv亚洲精品香蕉国产一区7ujn| 国产精品日韩在线| 亚洲成人在线网| 91国自产精品中文字幕亚洲| 国产主播喷水一区二区| 日韩中文字幕网址| 精品国产乱码久久久久酒店| 91精品国产乱码久久久久久久久| 欧美日韩成人黄色| 成人免费淫片视频软件| 久久天天躁狠狠躁老女人| 国产精品久久久久久影视| 国产成人精品国内自产拍免费看| 欧美性生交大片免费| 51色欧美片视频在线观看| 国内精品视频在线| 国产欧美日韩精品专区| 久久夜色精品国产欧美乱| 亚洲欧美激情另类校园| 国产精品一区二区女厕厕| 日韩精品在线观看网站| 久久久综合免费视频| 久久天堂电影网| 俺去亚洲欧洲欧美日韩| 色综合色综合网色综合| 国产一区二区三区在线观看视频| 日韩欧中文字幕| 日韩av影片在线观看| 国产精品久久久久91| 日本sm极度另类视频| 日韩激情视频在线播放| 亚洲国产成人一区| 亚洲欧美日韩国产成人| 日本午夜精品理论片a级appf发布| 精品国内自产拍在线观看| 久久天天躁夜夜躁狠狠躁2022| 欧美一区二区三区精品电影| 视频在线观看一区二区| 日韩免费中文字幕| 成人午夜激情免费视频| 日本久久亚洲电影| 日韩在线视频免费观看高清中文| 26uuu国产精品视频| 中文字幕视频一区二区在线有码| 亚洲性夜色噜噜噜7777| 久久久久久69| 国产成人在线精品| 欧美猛交免费看| 国产精品美女主播在线观看纯欲| 992tv在线成人免费观看| 国产精品大陆在线观看| 午夜精品在线视频| 午夜美女久久久久爽久久| 日韩成人在线视频观看| 久久精品青青大伊人av| 92国产精品久久久久首页| 日本a级片电影一区二区| 亚洲男人av电影| 欧美自拍视频在线| 欧美乱大交做爰xxxⅹ性3| 国产精品久久久久一区二区| 亚洲午夜国产成人av电影男同| 精品日韩中文字幕| 欧美精品video| 国产精品99蜜臀久久不卡二区| 欧美午夜精品伦理| 欧洲亚洲免费视频| 精品国产拍在线观看| 日韩禁在线播放| 国产欧美日韩精品专区| 久久成人18免费网站| 91精品国产91久久久久福利| 青青青国产精品一区二区| 欧美日韩不卡合集视频| 中文字幕欧美在线| 成人免费视频网| 亚洲精品成人久久电影| 中文字幕精品在线视频| 欧美亚洲国产日韩2020| 久久成年人免费电影| 国产精品视频在线播放| 97久久精品国产| 热99精品只有里视频精品| www欧美xxxx| 国产小视频国产精品| 日韩在线视频导航| 色综合伊人色综合网| 国产成人高潮免费观看精品| 中文字幕国产亚洲| 欧美另类高清videos| 美女av一区二区三区| 色琪琪综合男人的天堂aⅴ视频| 91精品视频免费| 国产精品自在线| 在线视频精品一| 久久6免费高清热精品| 欧美日韩亚洲一区二| 91在线免费看网站| 国产综合在线视频| 欧美日韩高清区| 亚洲视频在线观看| 国产午夜精品一区理论片飘花| 欧美色视频日本版| 欧美激情视频三区| 亚洲九九九在线观看| 日本精品视频在线观看|