AutoMapper(Object-Object-Mapping)


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

一.何种情况下使用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、付费专栏及课程。

余额充值