来自 威尼斯国际官方网站 2019-10-09 23:25 的文章
当前位置: 威尼斯国际官方网站 > 威尼斯国际官方网站 > 正文

中的有意思应用

能够看出除了最终一句代码,其余差不离是一模二样的,只是在结尾一句代码中,指标项目改成了List<DTOSource>仅此而已。看下运维结果什么:

率先步建设构造Source到DTOSource之间的映照,起先化贰个Source实例后,来看下执行结果:

威尼斯国际官方网站 1

先来看一些实例,四个类之间的映射。

 进而在MVC的Global中进三回性注册:

1  public SourceProfile()
2         {
3             base.CreateMap<Source, DTOSource>().ForMember(c => c.Desc, q => {
4                 q.MapFrom(z => z.Content);
5             });
6         }
 1  Mapper.Initialize(x => {
 2                 x.CreateMap<Source, DTOSource>().ForMember(c => c.Desc, q =>
 3                 {
 4                     q.MapFrom(z => z.Content);
 5                 });
 6             });
 7 
 8             s.Add(new Source { Id = 1, Content = "123" });
 9 
10             var dto = Mapper.Map<List<DTOSource>>(s);
 1  public class Source
 2     {
 3         public int Id { get; set; }
 4         public string Content { get; set; }
 5     }
 6 
 7     public class DTOSource
 8     {
 9         public int Id { get; set; }
10         public string Content { get; set; }
11     }

在MVC项目标选用中,能够将Mapper.Initialize封装到一个类里;

 1 Mapper.Initialize(x => {  x.AddProfile<SourceProfile>();  }); 

威尼斯国际官方网站 2

要改成一丢丢的代码既可:

我们将DTOSource中的Content的字段名改成Desc,此时只须要树立映射关系时,钦定字段就能够了:

1 public class SourceProfile : Profile
2     {
3         protected override void Configure()
4         {
5             CreateMap<Source, DTOSource>().ForMember(c => c.Desc, q => {
6                 q.MapFrom(z => z.Content);
7             });
8         }
9     }

威尼斯国际官方网站 3

能够看见与从前的运营结果是同等的。

首先定义八个类Source与DTOSource:

博主使用的AutoMapper版本6.1.1.0,因为AutoMapper在6.0版本时移除了Profile中的Configure,所以与6.0本子以下写法有一些差异,6.0之下版本写法为:

来拜会运转结果怎样;

威尼斯国际官方网站 , Source与DTOSource字段完全同样,来看看它俩怎样通过AutoMapper转变,代码一点也不细略。

 

 1 public class MvcApplication : System.Web.HttpApplication
 2     {
 3         protected void Application_Start()
 4         {
 5             AreaRegistration.RegisterAllAreas();
 6             FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
 7             RouteConfig.RegisterRoutes(RouteTable.Routes);
 8             BundleConfig.RegisterBundles(BundleTable.Bundles);
 9             //注册
10             AutoMapperForMvc.Register();
11         }
12     }
 public static class AutoMapperForMvc
    {
        public  static void Register()
        {
            Mapper.Initialize(x => {
                x.AddProfile<SourceProfile>();
            });
        }

    }

享有映射关系都能够写在那叁个类里,只要求在程序最初化的时候调用贰次就足以了:

 越来越多风趣的事物能够查阅官方网站

此起彼落Profile重写其Configure就可以,调用方式与上述未有太大差异。 Mapper.Initialize中可增加八个或多个Profile。

在实际上的品类中,那样的写法肯定是不契合供给的,经常会做二个打包,新建二个SourceProfile承继自Profile:

1 Mapper.Initialize(x => {
2    x.CreateMap<Source, DTOSource>().ForMember(c=>c.Desc,q=> {
3       q.MapFrom(z => z.Content);
4      });
5 });

实施到位后,能够见见dto中的数据与从前开始化的s的数量是一模一样的,就如直接将s拷贝了一份给dto,在七个类字段名定全同样的意况下那样,那么一旦DTOSource中的字段名与Source中的差别等如何,其实也很简短,只需

1 Mapper.Initialize(x=>{
2      x.CreateMap<Source,DTOSource>();
3 });
4 
5 Source s = new Source{Id=1,Content="123"};
6 
7 DTOSource dto = Mapper.Map<DTOSource>(s);

结果适合预期。

那么如何映射七个List,其实也很轻易,和上述代码差异常少能够说是改朝换代,只是在最终一步时,要做一丢丢的改换就足以了。如下边代码:

近来察觉了二个相比较风趣的事物 AutoMapper,首要将Model调换为DTO,DTO更青眼数量,对天地对象实行合理封装,进而不会将世界对象的作为过于暴光给表现层。

本文由威尼斯国际官方网站发布于威尼斯国际官方网站,转载请注明出处:中的有意思应用

关键词: