Запрет 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); })