轻量级的类库,一个对象映射为另一个对象,而不需要手动去转换。
一.何种情况下使用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 的使用,以及何时使用。