C# 防止AutoMapper ProjectTo添加不需要的列

C# 防止AutoMapper ProjectTo添加不需要的列,c#,sql,entity-framework,automapper,entity-framework-core,C#,Sql,Entity Framework,Automapper,Entity Framework Core,在我看来,使用AutoMapperProjectTo会在我的查询中添加一个不需要的(计算的)列。问题是: 选择顶部(1)案例 当[dto].[Id]为空时 然后强制转换(0为位),否则强制转换(1为位) 结束[dto]。[Enabled],[dto]。[DurationWarningThresholdSec],[dto]。[AverageDurationLabel] 我认为,第一个CASE&CAST未命名专栏实际上并不需要这是我这期文章的要点 这是被查询的EF核心(可能很重要)POCO实体:

在我看来,使用AutoMapper
ProjectTo
会在我的查询中添加一个不需要的(计算的)列。问题是:

选择顶部(1)案例
当[dto].[Id]为空时
然后强制转换(0为位),否则强制转换(1为位)
结束[dto]。[Enabled],[dto]。[DurationWarningThresholdSec],[dto]。[AverageDurationLabel]
我认为,第一个CASE&CAST未命名专栏实际上并不需要这是我这期文章的要点

这是被查询的EF核心(可能很重要)POCO实体:

公共类数据
{
公共Guid Id{get;set;}
已启用公共bool的{get;set;}
public int DurationWarningThresholdSec{get;set;}
公共字符串AverageDurationLabel{get;set;}
public DateTime CreatedAt{get;set;}
公共日期时间?修改日期{get;set;}
公共日期时间?删除日期{get;set;}
公共Guid公司ID{get;set;}
}
//在DbContext.OnModelCreating()中
entityTypeBuilder.HasKey(cfg=>cfg.Id);
entityTypeBuilder.HasIndex(cfg=>cfg.DeletedAt);
以下是映射的目标形状:

公共类结果
{
公共布尔现有{get;set;}
公共计数器mainconfig Main{get;set;}
}
公共类计数器配置
{
已启用公共bool的{get;set;}
public int DurationWarningThresholdSec{get;set;}
公共字符串AverageDurationLabel{get;set;}
}
这是映射初始设置:

Mapper.Initialize(cfg=>
{
cfg.CreateMap()
.ForMember(dest=>dest.Main,opt=>opt.MapFrom(src=>src))
.ForMember(dest=>dest.Existing,opt=>opt.Ignore());
CreateMap();
});
我知道我可以投影到内部类型,
CountersMainConfig
,然后手动创建外部类型实例。但我还有更多类似的案例,有更复杂的外部类型,所以我想为所有这些案例进行分类

如果我实际投影到内部类型,那么第一列将离开生成的查询。我错过了什么?助教

编辑我创建了一个简化的解决方案,只是为了在询问之前确认问题。之后,我还尝试更改外部目标类,方法是将
Existing
设为浮点数,或者在没有运气的情况下将其删除。

问题与此类似,解决方案也类似-配置
AutoMapper
以不生成
null
检查
Main
属性:

.ForMember(dest => dest.Main, opt => { opt.AllowNull(); opt.MapFrom(src => src); })

尝试设置一个常量值,而不是使用
忽略
formmember(dest=>dest.Existing,opt=>opt.UseValue(false))。不过不是很干净。
忽略
应该可以工作。如果将布尔属性设置为可空,则可能会应用
Ignore
?也许您的映射在初始定义之后被覆盖,
Ignore
丢失了?谢谢您的回复。但即使在完全删除
现有的
属性之后,也会生成相同的SQL,所以不知何故,这让我想到这样的属性其实并不重要。它似乎与目的地的嵌套结构有关。我会试试的。只是为了确认布尔属性不是问题所在@伊万·斯托夫的回答起了作用