AutoMapper(Object-Object-Mapping)

本文介绍AutoMapper库的应用场景、配置及使用方法。包括如何通过AutoMapper实现对象之间的映射、映射规则设置、以及如何验证配置的有效性。还提供了具体的示例代码,如创建映射规则、处理集合映射等。

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


轻量级的类库,一个对象映射为另一个对象,而不需要手动去转换。

一.何种情况下使用AutoMapper,其作用是什么

二.映射规则

三.配置

   1. 需安装AutoMapper  Nuget包

   2.使用静态全局mapper注册的话,要放在应用程序启动的时候。即Global.asax文件中。

     


    

      3.AutoMapper提供下面方法去验证我们的配置是否有效,无效会抛出异常:(待理解验证)

         Mapper.AssertConfigurationIsValid();

      4.根据实体中字段名称来映射TModel(数据库实体)同ViewModel(用户交互实体),不区分大小写

四.使用

     以下以仓库表实体举例说明,可见该仓库表自关联并且关联两个子表。在做页面展示的时候,我们仅想要展示出所有的仓库信息,并不需要关联展示出该仓库的父级

或子级,以及该仓库的地址信息、限定物料类型等。因为我们可创建一个仓库表的Dto实体类。

    1.仅想简单的展示仓库名称,省,市等信息

      CreateMap<Basic_Warehouse, DtoBasic_Warehouse>();

     
public class DtoBasic_Warehouse
    {
        public System.Guid Id { get; set; }
        public string WareHouseName { get; set; }
        public string WHProvinceCode { get; set; }
        public string WHProvinceName { get; set; }
        public string WHCityCode { get; set; }
        public string WHCityName { get; set; }
        public Nullable CreatedById { get; set; }
        public Nullable CreatedAt { get; set; }
        public Nullable UpdatedById { get; set; }
        public Nullable UpdatedAt { get; set; }
        public bool Deleted { get; set; }
        public Nullable DeletedById { get; set; }
        public Nullable DeletedAt { get; set; }
        public Nullable ParentId { get; set; }
        public Nullable WareHouseType { get; set; }
        public string Remark { get; set; }
        public Nullable WareHouseLevel { get; set; }
    }

    2. Dto实体类中需新增某一字段(对仓库限定的物料类型做展示,仅展示限定物料的名称,以逗号分隔)
     
     CreateMap<Basic_Warehouse, DtoBasic_Warehouse>()
                .ForMember(x => x.WareHouseMaterialTypes, y => y.MapFrom(s => string.Join(",", s.Basic_Warehouse_MaterialType.Where(o => o.Deleted == false).Select(o => o.MaterialTypeName))))  ;
      
    
    public class DtoBasic_Warehouse
    {
        public System.Guid Id { get; set; }
        public string WareHouseName { get; set; }
        public string WHProvinceCode { get; set; }
        public string WHProvinceName { get; set; }
        public string WHCityCode { get; set; }
        public string WHCityName { get; set; }
        public Nullable CreatedById { get; set; }
        public Nullable CreatedAt { get; set; }
        public Nullable UpdatedById { get; set; }
        public Nullable UpdatedAt { get; set; }
        public bool Deleted { get; set; }
        public Nullable DeletedById { get; set; }
        public Nullable DeletedAt { get; set; }
        public Nullable ParentId { get; set; }
        public Nullable WareHouseType { get; set; }
        public string Remark { get; set; }
        public Nullable WareHouseLevel { get; set; }

        //Dto字段
        public string WareHouseMaterialTypes { get; set; }    //仓库限定物料类型
    }
   
    3. 想要两个list之间进行映射,仅需将对应实体进行映射即可。
 
     CreateMap<Basic_Warehouse, DtoBasic_Warehouse>();
     var  wareHouseList=new <IQueryable<Basic_Warehouse>>();
     var dtoWareHouseList=wareHouseList.MapTo<IEnumerable<DtoBasic_Warehouse>>();
    4. 想要获取仓库以及仓库所有地址信息,因地址为仓库对应子表,需要对子表进行映射,仓库主表进行映射

    CreateMap<Basic_Warehouse, DtoBasic_Warehouse>();
    CreateMap<Basic_Warehouse_Address, DtoBasic_Warehouse_Address>();
   
   
 public class DtoBasic_Warehouse
    {
        public System.Guid Id { get; set; }
        public string WareHouseName { get; set; }
        public string WHProvinceCode { get; set; }
        public string WHProvinceName { get; set; }
        public string WHCityCode { get; set; }
        public string WHCityName { get; set; }
        public Nullable CreatedById { get; set; }
        public Nullable CreatedAt { get; set; }
        public Nullable UpdatedById { get; set; }
        public Nullable UpdatedAt { get; set; }
        public bool Deleted { get; set; }
        public Nullable DeletedById { get; set; }
        public Nullable DeletedAt { get; set; }
        public Nullable ParentId { get; set; }
        public Nullable WareHouseType { get; set; }
        public string Remark { get; set; }
        public Nullable WareHouseLevel { get; set; }


        public ICollection Basic_Warehouse_Address { get; set; }
    }

    5. Ignore 的使用,以及何时使用。
 
    
     

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值