繁体   English   中英

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

[英]Automapper ProjectTo not working when used with custom mapping

我正在使用 asp.net 核心 2.2、Microsoft.EntityFrameworkCore(2.2.4)、Microsoft.EntityFrameworkCore.Cosmos(2.2.4)、AutoMapper.Extensions.Microsoft.DependencyInjection(7.0.0)

这是我的代码:

映射配置文件.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)));
    }
}

服务类.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()与 map 一对一的属性。 否则,该值不会被映射。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM