Automapper ProjectTo与自定义映射一起使用时不起作用



我使用的是asp.net core 2.2、Microsoft.EntityFrameworkCore(2.2.4(、Microsoft.EntityFramework core.Cosmos(2.2.4

这是我的代码:

映射Profile.cs

public class MappingProfile : Profile
{
public MappingProfile()
{
CreateMap<Languages, LanguageDTO>();        
CreateMap<Countries, CountryDTO>().ForMember(dest => dest.Uuid, opt => opt.MapFrom(src => src.CountryId)).ForMember(dest => dest.DisplayName, opt => opt.MapFrom(src => src.DisplayName)).ForMember(dest => dest.DisplayNameShort, opt => opt.MapFrom(src => Helper.ReplaceChars(src.DisplayName))).ForMember(dest => dest.Path, opt => opt.MapFrom(src => Helper.ReplaceChars(src.DisplayName)));
}
}

ServiceClass.cs

countries = await _mapper.ProjectTo<CountryDTO>(_dbContext.Countries.Where(cc => cc.IsPublished.Equals(true) && cc.LanguageId.Equals(dftLanguageId))).ToListAsync();

型号

public class Countries
{
public string id
{
get;
set;
}
public int CountryId
{
get;
set;
}
public int? SVGImageId
{
get;
set;
}
public int? PNGImageId
{
get;
set;
}
public bool IsPublished
{
get;
set;
}
public string CreatedBy
{
get;
set;
}
public string CreatedDate
{
get;
set;
}
public string UpdatedBy
{
get;
set;
}
public string UpdatedDate
{
get;
set;
}
public int? CountryContentId
{
get;
set;
}
public int? LanguageId
{
get;
set;
}
public string DisplayName
{
get;
set;
}
public string DisplayNameShort
{
get;
set;
}
}
public class CountryResult
{
public CountryResult()
{
Countries = new List<CountryDTO>();
}
public List<CountryDTO> Countries
{
get;
set;
}
}
public class CountryDTO
{
[JsonProperty("pngimagePath")]
[RegularExpression(Constants.GeneralStringRegularExpression)]
public string PNGImagePath
{
get;
set;
}
= "";
[JsonProperty("svgimagePath")]
[RegularExpression(Constants.GeneralStringRegularExpression)]
public string SVGImagePath
{
get;
set;
}
= "";
[RegularExpression(Constants.GeneralStringRegularExpression)]
public string DisplayName
{
get;
set;
}
= "";
[RegularExpression(Constants.GeneralStringRegularExpression)]
public string DisplayNameShort
{
get;
set;
}
= "";
[RegularExpression(Constants.GeneralStringRegularExpression)]
public string ProviderName
{
get;
set;
}
= "";
[RegularExpression(Constants.GeneralStringRegularExpression)]
public string ProviderTerms
{
get;
set;
}
= "";
public int Uuid
{
get;
set;
}
[RegularExpression(Constants.GeneralStringRegularExpression)]
public string Name
{
get;
set;
}
= "";
[RegularExpression(Constants.GeneralStringRegularExpression)]
public string Path
{
get;
set;
}
= "";
public bool CompleteResponse
{
get;
set;
}
}

在这里,我看到并没有映射所有的值。例如,Name设置为空字符串,CompleteResponse设置为false。

有人能帮我解决这个问题吗?

尝试按如下方式使用ProjectTo

var countries = _dbContext.Countries
.Where(cc => cc.IsPublished.Equals(true) && cc.LanguageId.Equals(dftLanguageId))
.ProjectTo<CountryDTO>(_mapper.ConfigurationProvider).ToList();

注意:除非源和目标之间的属性名称相同,否则需要使用ForMember()对属性进行一对一映射。否则,不会映射值。

相关内容

  • 没有找到相关文章

最新更新