public virtual void ConfigureEntityToViewModelMapper(IMapperConfigurationExpression configurationExpression) { EntityToViewModelExpression = configurationExpression.CreateMap <TEntity, TViewModel>(); EntityToViewModelExpression.PreserveReferences(); }
public static IMappingExpression <TModel, TServiceModel> ApplyDefaultModelMappingOptions <TModel, TServiceModel>(this IMappingExpression <TModel, TServiceModel> mappingExpression) where TServiceModel : ServiceModelBase where TModel : ModelBase { var serviceModelProperties = typeof(TServiceModel).GetProperties(); var modelProperties = typeof(TModel).GetProperties(); foreach (var propertyInfo in modelProperties) { if (typeof(ModelBase).IsAssignableFrom(propertyInfo.PropertyType)) { var serviceModelPropertyInfo = serviceModelProperties.FirstOrDefault(x => Equals(x.Name, propertyInfo.Name)); if (serviceModelPropertyInfo != null && typeof(ServiceModelBase).IsAssignableFrom(serviceModelPropertyInfo.PropertyType)) { mappingExpression.ForMember( propertyInfo.Name, options => { options.ResolveUsing((model, serviceModel, serviceModelMember, resolutionContext) => { if (IsPropertyIncluded <TServiceModel>(resolutionContext, propertyInfo.Name)) { var item = propertyInfo.GetValue(model); if (item is ModelBase modelBase) { if (modelBase.IsObsolete) { return(null); } } return(propertyInfo.GetValue(model)); } return(null); }); }); } } if (typeof(IEnumerable <ModelBase>).IsAssignableFrom(propertyInfo.PropertyType)) { var serviceModelPropertyInfo = serviceModelProperties.FirstOrDefault(x => Equals(x.Name, propertyInfo.Name)); if (serviceModelPropertyInfo != null && typeof(IEnumerable <ServiceModelBase>).IsAssignableFrom(serviceModelPropertyInfo.PropertyType)) { mappingExpression.ForMember( propertyInfo.Name, options => { options.ResolveUsing((model, serviceModel, serviceModelMember, resolutionContext) => { if (IsPropertyIncluded <TServiceModel>(resolutionContext, propertyInfo.Name)) { var items = propertyInfo.GetValue(model); if (items is IEnumerable <ModelBase> ) { items = ((IEnumerable <ModelBase>)items).Where(x => !x.IsObsolete); } return(items); } return(null); }); }); } } } return(mappingExpression.PreserveReferences()); }
private static void Configure(TypeMap x, IMappingExpression expression) => expression.PreserveReferences();