61 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C#
		
	
	
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.Linq;
 | |
| using System.Text;
 | |
| using System.Threading.Tasks;
 | |
| using AutoMapper;
 | |
| 
 | |
| namespace PlixP.Models
 | |
| {
 | |
|     /// <summary>
 | |
|     /// Base Dto Class initial map config between entity and dto
 | |
|     /// </summary>
 | |
|     /// <typeparam name="TDto">Type of Dto Class</typeparam>
 | |
|     /// <typeparam name="TEntity">Type of Entity Class</typeparam>
 | |
|     public abstract class BaseDto<TDto, TEntity> : IMapperConf
 | |
|         where TDto : class, new()
 | |
|         where TEntity : new()
 | |
|     {
 | |
| 
 | |
|         public TEntity ToEntity()
 | |
|         {
 | |
|             return Mapper.Map<TEntity>(CastToDerivedClass(this));
 | |
|         }
 | |
| 
 | |
|         public TEntity ToEntity(TEntity entity)
 | |
|         {
 | |
|             return Mapper.Map(CastToDerivedClass(this), entity);
 | |
|         }
 | |
| 
 | |
|         public static TDto FromEntity(TEntity model)
 | |
|         {
 | |
|             return Mapper.Map<TDto>(model);
 | |
|         }
 | |
| 
 | |
|         protected TDto CastToDerivedClass(BaseDto<TDto, TEntity> baseInstance)
 | |
|         {
 | |
|             return Mapper.Map<TDto>(baseInstance);
 | |
|         }
 | |
| 
 | |
|         public virtual void MapperConfig(Profile profile)
 | |
|         {
 | |
|             var mappingExpression = profile.CreateMap<TDto, TEntity>();
 | |
| 
 | |
|             var dtoType = typeof(TDto);
 | |
|             var entityType = typeof(TEntity);
 | |
|             //Ignore any property of source (like Post.Author) that dose not contains in destination 
 | |
|             foreach (var property in entityType.GetProperties())
 | |
|             {
 | |
|                 if (dtoType.GetProperty(property.Name) == null)
 | |
|                     mappingExpression.ForMember(property.Name, opt => opt.Ignore());
 | |
|             }
 | |
| 
 | |
|             CustomMappings(mappingExpression.ReverseMap());
 | |
|         }
 | |
| 
 | |
|         public virtual void CustomMappings(IMappingExpression<TEntity, TDto> mapping)
 | |
|         {
 | |
|         }
 | |
|     }
 | |
| }
 |