关于C# automap的介绍

本文详细介绍AutoMapper库的基础使用方法,演示了如何简化DTO与Model间的对象转换过程,包括基本属性映射及子实体映射,提升开发效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AutoMapper是一个能自动完成对象与对象之间转化的开源库;通常DTO(Data Transfer Object数据传输对象)与Model之间的常规转化做法会使代码相当的冗长,AutoMapper作者为了减少这种工作量,写了这个开源库,使DTO与Model之间能够自动的完成转化。

基础使用方法:

public class DTO
{
    public string userName {set; get;}
    public string age {set; get;}
    public string job {set; get;}
}
public class Model
{
    public string userName {set; get;}
    public string age {set; get;}
    public string job {set; get;}
}

上述的DTO与Model,一般情况下,DTO为直接映射数据库中的数据,Model为交互数据,那么如何把两着对象里的数据进行映射呢?

  • 通常的做法为:
//DTO与Model之间可以这样转化,因为的对象的属性都为string类型
DTO.userName = Model.userName;
DTO.age = Model.age ;
DTO.job = Model.job ;
  • 使用AutoMapper转化:
//首先需要先为DTO与Model之间定义一个映射关系
Mapper.CreateMap<DTO, Model>();
DTO dtoData = GetdtoDataFromDB();
Model modelData = Mapper.Map<DTO, Model>(dtoData );

这里的DTO对象就被AutoMapper自动转化成了Model对象,所以modelData中的userName、age、job的值即为GetdtoDataFromDB()方法取出来的值。

在实际的项目中使用AutoMapper对DTO与Model进行自动转化的时候遇到了一个坑点,其实也不算是坑点,只是一个我没有注意到的地方,这里做一个记录,加深自己的印象。
DTO与Model的结构如下:

// DTO
public class DTO
{ 
    public string userName {set; get;} 
    public string age {set; get;} 
    public string job {set; get;}
    public AddressDTO address {set ; get;}
}
public class AddressDTO{ 
    public string country {set; get;} 
    public string province {set; get;} 
}
// Model
public class Model
{ 
    public string userName {set; get;} 
    public string age {set; get;} 
    public string job {set; get;}
    public AddressModel address {set ; get;}
}
public class AddressModel{ 
    public string country {set; get;} 
    public string province {set; get;} 
}

类似与这样的对应的涵盖子实体的我们在写法上面需要修订就需要再添加上子对象的映射

Mapper.CreateMap<DTO, Model>();
Mapper.CreateMap<AddressDTO , AddressModel >();//子对象映射关系
DTO dtoData = GetdtoDataFromDB();
Model modelData = Mapper.Map<DTO, Model>(dtoData );

 



 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值