Создания маппинга между классами

  • Михаил
  • 8 мин. на прочтение
  • 93
  • 05 Dec 2024
  • 05 Dec 2024

Для создания маппинга между классами MeasuringDeviceSubstanceThreshold и MeasuringDeviceSubstanceThresholdViewModel с использованием AutoMapper, вам нужно настроить профиль маппинга. Вот пример, как это можно сделать:

Установите пакет AutoMapper, если он еще не установлен:

dotnet add package AutoMapper
dotnet add package AutoMapper.Extensions.Microsoft.DependencyInjection

Создайте профиль маппинга:

public class MappingProfile : Profile
{
    public MappingProfile()
    {
        CreateMap<MeasuringDeviceSubstanceThreshold, MeasuringDeviceSubstanceThresholdViewModel>()
            .ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.Id))
            .ForMember(dest => dest.MinThreshold, opt => opt.MapFrom(src => src.MinThreshold))
            .ForMember(dest => dest.MaxThreshold, opt => opt.MapFrom(src => src.MaxThreshold))
            .ForMember(dest => dest.MeasurementAccuracy, opt => opt.MapFrom(src => src.MeasurementAccuracy));

        CreateMap<MeasuringDeviceSubstanceThresholdViewModel, MeasuringDeviceSubstanceThreshold>()
            .ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.Id))
            .ForMember(dest => dest.MinThreshold, opt => opt.MapFrom(src => src.MinThreshold))
            .ForMember(dest => dest.MaxThreshold, opt => opt.MapFrom(src => src.MaxThreshold))
            .ForMember(dest => dest.MeasurementAccuracy, opt => opt.MapFrom(src => src.MeasurementAccuracy));
    }
}

Настройте AutoMapper в вашем приложении. Например, в ASP.NET Core это можно сделать в Startup.cs:

public class Startup
{
   public void ConfigureServices(IServiceCollection services)
   {
		var config = new MapperConfiguration(cfg => { cfg.AddProfile<MappingProfile>(); });
		builder.Services.AddSingleton(_ => config.CreateMapper());
       // Другие настройки сервисов
   }
   public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
   {
       // Настройка конвейера HTTP
   }
}

Теперь AutoMapper будет знать, как маппить объекты между MeasuringDeviceSubstanceThreshold и MeasuringDeviceSubstanceThresholdViewModel. Вы можете использовать его для маппинга объектов в вашем коде:

public class SomeService
{
    private readonly IMapper _mapper;

    public SomeService(IMapper mapper)
    {
        _mapper = mapper;
    }

    public MeasuringDeviceSubstanceThresholdViewModel ConvertToViewModel(MeasuringDeviceSubstanceThreshold threshold)
    {
        return _mapper.Map<MeasuringDeviceSubstanceThresholdViewModel>(threshold);
    }

    public MeasuringDeviceSubstanceThreshold ConvertToModel(MeasuringDeviceSubstanceThresholdViewModel viewModel)
    {
        return _mapper.Map<MeasuringDeviceSubstanceThreshold>(viewModel);
    }
}

Используем в контролере.

   [Route("api/[controller]")]
   [ApiController]
   public class MeasuringController : Controller
   {
       private readonly IMapper mapper;
       private readonly Context2 context2;
       public MeasuringController(IMapper mapper, Context2 context2)
       {
           this.mapper = mapper;
           this.context2 = context2;
       }
и далее .....
        // Предположим, что у вас есть метод для получения объекта MeasuringDeviceSubstanceThreshold по ID
        var threshold = GetMeasuringDeviceSubstanceThresholdById(id);

        if (threshold == null)
        {
            return NotFound();
        }

        // Преобразование объекта MeasuringDeviceSubstanceThreshold в MeasuringDeviceSubstanceThresholdViewModel
        var viewModel = _mapper.Map<MeasuringDeviceSubstanceThresholdViewModel>(threshold);
   

Этот пример показывает, как настроить и использовать AutoMapper для маппинга между двумя классами.