Запрет AutoMapper ProjectTo от добавления нежелательных столбцов

Мне кажется, что с помощью AutoMapper ProjectTo<> добавляет нежелательный (рассчитанный) столбец в мой запрос. Вот запрос:

SELECT TOP(1) CASE
    WHEN [dto].[Id] IS NULL
    THEN CAST(0 AS BIT) ELSE CAST(1 AS BIT)
END, [dto].[Enabled], [dto].[DurationWarningThresholdSec], [dto].[AverageDurationLabel]

я думаю, что эта первая безымянная колонка CASE & CAST на самом деле не нужна. Это суть моей проблемы.

Это запрашиваемая сущность POCO EF Core (может быть, это имеет значение):

public class CountersConfigData
{
    public Guid Id { get; set; }

    public bool Enabled { get; set; }
    public int DurationWarningThresholdSec { get; set; }
    public string AverageDurationLabel { get; set; }

    public DateTime CreatedAt { get; set; }
    public DateTime? ModifiedAt { get; set; }
    public DateTime? DeletedAt { get; set; }
    public Guid CompanyId { get; set; }
}

// within DbContext.OnModelCreating()
entityTypeBuilder.HasKey(cfg => cfg.Id);
entityTypeBuilder.HasIndex(cfg => cfg.DeletedAt);

Вот форма назначения карты:

public class Result
{
    public bool Existing { get; set; }
    public CountersMainConfig Main { get; set; }
}

public class CountersMainConfig
{
    public bool Enabled { get; set; }
    public int DurationWarningThresholdSec { get; set; }
    public string AverageDurationLabel { get; set; }
}

Это начальная настройка отображения:

Mapper.Initialize(cfg =>
{
    cfg.CreateMap<CountersConfigData, Result>()
        .ForMember(dest => dest.Main, opt => opt.MapFrom(src => src))
        .ForMember(dest => dest.Existing, opt => opt.Ignore());

    cfg.CreateMap<CountersConfigData, CountersMainConfig>();
});

Я понимаю, что могу проецировать на внутренний тип, CountersMainConfigи затем вручную создайте экземпляр внешнего типа. Но у меня есть другие случаи, похожие на этот, с более сложными внешними типами, поэтому я бы хотел разобраться со всеми из них.

Если я на самом деле проецирую на внутренний тип, то первый столбец удаляется от сгенерированного запроса. Что мне не хватает? Т.А.

РЕДАКТИРОВАТЬ Я создал упрощенное решение, чтобы подтвердить проблему, прежде чем спрашивать здесь. После этого я также попытался изменить внешний класс назначения, сделав Existing поплавок, или удалив его, без удачи.

1 ответ

Решение

Эта проблема аналогична Automapper Projection с ошибкой дочернего свойства Linq OrderBy, поэтому решение - настроить AutoMapper не генерировать null проверить на Main имущество:

.ForMember(dest => dest.Main, opt => { opt.AllowNull(); opt.MapFrom(src => src); })
Другие вопросы по тегам