五步左右OOM框架AutoMapper基本选择

正文版权归新浪和作者吴双本人共同拥有,转发和爬虫请注解原文地址
www.cnblogs.com/tdws

后天开始了第四期打卡,这一期的打卡项目是学习李笑来《通往财富自由之路》并出口要点和感悟,主要目标有五个:

 写在前头

提拔自己的操作系统。

经过输出陶冶自己的写作能力。

OOM顾名思义,Object-Object-Mapping实体间互为转换,AutoMapper也是个老生常谈了,其意义在于扶助您无需手动的变换简单而又艰巨的实体间事关,比如ViewModel和entity的转移,SearchModel和Entity的转移,我那篇分享的意思在于,网上半数以上的分享都是几年前的,很多方法已经被扬弃,到了编译器里会告知您该形式已经不合时宜,屏弃的,不指出使用的,比如Mapper.CreateMap等方式,当然老驾驶员半数以上间接就去github看文档了,或者google一下就精通了,但是粤语资料关于艺术放弃后,并没有怎么注脚了。本篇的四个实例可以帮您解决广大的骨干问题.

说实话,当李笑来《通往财富自由之路》在8月27日在获取APP上线的时候,我正在看李笑来的《把时间作为朋友》,当时自家有点想订,但却布鼓雷门地认为那个付费的文章内容肯定都源于于李笑来写的书,所以我没须求再去花钱看她的篇章了,认真读他的书就好了。

 

但当我读完李笑来《把时间作为朋友》和《新生-七年就是一辈子》后却依然惊魂未定的时候,某一天看到李笑来微信公众号【学习深造再深造】宣布的一篇文章《有部分相互你一直看不到……》后,我才下决心付费订了这一个专栏,其中有多少个第一原因:

 预备

1.
我猛然意识读一篇小说的留言竟然可以让投机暴发越来越多的探究,更敬重的是您会看出有过几人跟你一样焦虑,迷茫但依然没有自暴自弃,依旧在不停努力……

原本,我并不是孤零零的留存。

2.
用了那篇文章里的一个优化,便宜了10块钱(对,你想的正确性,那真的是敦促自己付款的最直接原因)

 首先我们准备一些ViewModel和TModel。ViewModel就是您和用户交互的实体。TModel就是你与数据库打交道的实业。

自家充满期望地开拓李笑来的《通往财富自由之路》,一篇一篇地密切读并时不时地调换自己的来回经历,瞅着望着自己豁然觉得温馨好LOW啊,竟然为了省10块钱,在自身成长的征程上浪费了全体2个多月的时刻!

实业浮现如下:

咳……也难怪我近年觉得压力山大,年轻时拥有不愿去想的题材,都趁着时光的延迟已与自身不期而遇;而我曾经的跌宕和“只要喜欢就好”,同样也乘机时间流逝,让自己起来只好承受起本就活该负责起的权利。

TModel有如下多少个不难的实体,他们有单独的实体,也有部分多的实业。

或是那时你会说:哈,你果然是一个便于被忽悠的人,那就是一篇刺激你下单的软文呀!

    public class TAddress
    {
        public string Country { get; set; }
        public string City { get; set; }
        public string Street { get; set; }
        public string PostCode { get; set; }
        public string CreateTime { get; set; }
        public int CreateUserId { get; set; }
    }

     public class TAuthor
    {

            public string Name { get; set; }
            public string Description { get; set; }
            public List<TContactInfo> ContactInfo { get; set; }

    }
     public class TContactInfo
    {
        public int Id { get; set; }
        public string Email { get; set; }
        public string Blog { get; set; }
        public string Twitter { get; set; }
    }

自己肯定,我就是一个不难被摇晃的人,因为我就是李笑来所涉及的“七个大坑”里的一份子。

ViewModel如下五个:

何以是三个大坑?

 public class VM_Address
    {
        public string Country { get; set; }
        public string City { get; set; }

        public string City2 { get; set; }
    }
    public class VM_Author
    {
        public string Name { get; set; }
        public string Description { get; set; }
        public List<VM_ContactInfo> ContactInfo { get; set; }
    }

    public class VM_ContactInfo
    {
        public int Id { get; set; }
        public string Email { get; set; }
        public string Blog { get; set; }
        public string Twitter { get; set; }
    }

莫明其妙的凑热闹

着急火燎的随大流

操碎了别人的灵魂

 

 单个实体转换

1

马路上自我很少会凑热闹,但在网上却不能控制自己凑热闹。

咱俩的手机里时不时会推送一些引发眼球的信息,比如【百余中中原人游南朝鲜被关小黑屋】、【巴黎大巴用行李占座打架】……等,手指无意识就点开了,其实看完了也没怎么收获,就是满意了瞬间温馨的猎奇心,而正在做的政工却备受了绿灯,往往又要再从头初阶,才能跟打断以前那部分接上。

原先自己的大运不是碎片化的,而是被碎片化!

单个实体转换的时候,在性质字段名称完全匹配的情事下,你只需点名三个实体间的转换规则,指定source源实体和destination目标实体。那么您应有参照如下实例:

2

再说随大流,喏,你看我今日开展公众号其实就是随大流。近日内容创业很火,一大批知识型IP涌现,随便一篇文章就有几十个,甚至上百个赞扬;随便一个8.8元的科目就有几百人,甚至上千人付费参与,好像那样的点子赚取不难的分外!

不就是写些鸡汤励志文嘛,不就是分享些自己的办事和生存经历嘛~

I believe I can fly !  I can do it too !

下一场我就在八月1日启幕写公众号,第一篇我从思想到写到发表,一共用了大约3个时辰,第二篇用了差不多4个小时,第三篇……我从早上9点半初始思索,写写删删,向来到夜里11点都没写完,那种悲伤感压得我喘不过气,内人在边缘望着自己纠结的规范,摇了舞狮无奈地说了句:“丈夫,洗洗睡呢~”

原先我当成Too young too
naive!人家都已经默默无闻地准备了十年以上了,我想一夜之间赶上,怎么可能?!

趋势,往往都属于那多少个故意或无意已经准备好的人。

            VM_Address dto = new VM_Address
            {
                Country = "China",
                City = "Beijing"
            };

            Mapper.Initialize(m => m.CreateMap<VM_Address, TAddress>());
            TAddress address = Mapper.Map<VM_Address, TAddress>(dto);

3

最后说说操碎别人的灵魂,那个我后天到是很少有,但在高等校园有一段时间尤其喜欢给人提“人生提出”,越发是给女人(借此显得自己很有考虑?很有魅力?),不管对方是或不是接受,我都非要给对方讲一大堆道理,希望她可以从此立地成佛,奋发图强,其实呢,那几个道理都是从一些鸡汤文中看来的。

嘿嘿,现在追思来那时的投机真正好搞笑,尤其是那个曾被自己“传道”过的女孩子,我想她们之所以没有现场拆穿自己,并非是因为他俩很傻很天真,而是因为她俩的的确很善良。

身在坑中不知坑,看了李笑来的分析,我才赫然通晓自己为啥会在坑中,而且被坑了如此多年而不自知!

倘若说我今日被李笑来“忽悠”了,这也是为着未来不再被外人忽悠。

思维格局的不比,决定了人与人以内的距离。

如上所述我成长那副药,一辈子也无法停。

-END-

请留目的在于AutoMapper5.x当中,Initialize来开头化你的平整是首选的。

在你指定转换规则后,请使用Map方法,举办更换并出口你的对象实体。还有第四个参数代表SourceModel,第一个参数是DestinationModel.

 单个实体分歧名属性转换

 当您需求对两样名目的字段来拓展映射的时候,请留心利用ForMember方法,第四个参数须要你制定所需更加布署的目的字段,第一个参数你则要求制订你对该字段属性的操作,我选取了它提供的MapFrom方法,意义在于告诉AutoMapper,我索要讲目标实体的City来源
指定为 源实体的City2属性值。

            VM_Address dto = new VM_Address
            {
                Country = "China",
                City2 = "Beijing"
            };

            Mapper.Initialize(m => m.CreateMap<VM_Address, TAddress>().ForMember(x => x.City, opt => opt.MapFrom(o => o.City2)));
            TAddress address = Mapper.Map<VM_Address, TAddress>(dto);

 

 集合转换

 在集合间转换的时候,你不须求配置目的List与源List对象中的匹配,而只要求配备你泛型对象的映射匹配关系。

            TAddress address = new TAddress { Country = "China", City = "Beijing" };
            TAddress address2 = new TAddress() { Country = "USA", City = "New York" };
            List<TAddress> addressList = new List<TAddress>() { address2, address };

            Mapper.Initialize(m => m.CreateMap<TAddress, VM_Address>());//这里仅需配置实体间的转换,而不是实体集合的转换
            List<VM_Address> res = Mapper.Map<List<TAddress>, List<VM_Address>>(addressList);

 

 实体包蕴分化档次属性转换(忽略属性)

 在实体包括不一样类型属性的时候,比如TModel1中包括了一个List<TModel>,而你的ViewModel1中隐含了一个List<ViewModel>.那一个时候你可以挑选忽略那些特性

            var contacts = new List<TContactInfo>() { new TContactInfo() 
          { Blog = "myblog", Email = "ws@qq.com" }, new TContactInfo() { Blog = "myblog", Email = "ll@qq.com" } };
            TAuthor author = new TAuthor() { Description = "描述", Name = "吴双", ContactInfo = contacts };

            Mapper.Initialize(m => { m.CreateMap<TAuthor, VM_Author>().ForMember(x => x.ContactInfo, opt => opt.Ignore()); });
       VM_Author dto = Mapper.Map<TAuthor, VM_Author>(author);

//这里的Ignore代表配置ContractInfo该属性的操作  为 忽略Ignore,映射时将忽略该属性   由于List<TContactInfo>()和List<VM_ContactInfo>() 是不同类型,所以需要配置忽略或者是特殊映射,特殊映射例子看下方

 

 实体蕴含差别品类属性转换(指定属性Mapfrom)

 当然你要求那几个特性的时候,你能够不忽视她,而是拔取MapFrom来拓展出格的指定,并且在类型不一致的时候,你要指定你多个体系间的照射匹配关系。正如下边实例中的

 m.CreateMap<TContactInfo, VM_ContactInfo>();和

m.CreateMap<TAuthor, VM_Author>().ForMember(x => x.ContactInfo, opt => opt.MapFrom(o => o.ContactInfo));

            var contacts = new List<TContactInfo>()
            {
                new TContactInfo() { Blog = "myblog", Email = "ws@qq.com" },
                new TContactInfo() { Blog = "myblog", Email = "ll@qq.com" }
            };
            TAuthor author = new TAuthor() { Description = "描述", Name = "吴双", ContactInfo = contacts };

            Mapper.Initialize(m =>
            {
                m.CreateMap<TContactInfo, VM_ContactInfo>();//注意 内部不同类型实体转换时必要的
                m.CreateMap<TAuthor, VM_Author>().ForMember(x => x.ContactInfo, opt => opt.MapFrom(o => o.ContactInfo));//注意  制定MapFrom是必要的
            });

            VM_Author dto = Mapper.Map<TAuthor, VM_Author>(author);

 

 写在结尾

在实体转换中,AutoMapper的需求性和实用性已经被您一览无余。 

如若本身的个别分享对您有点滴辅助,欢迎点击下方绿色按钮关切,我将不断输出实用分享。也欢迎为您自己,也为自己点赞。