自动映射器在映射同一类时删除所有数组



我有以下类

public class Unit
{
    [JsonProperty("id")]
    public string Id { get; set; }
    [JsonProperty("unittype")]
    public UnitType UnitType { get; set; }
    [JsonProperty("name")]
    public string Name { get; set; }
    [JsonProperty("language")]
    public string Language { get; set; }
    [JsonProperty("managers")]
    public List<Manager> Managers { get; set; }
    [JsonProperty("logoURL")]
    public string LogoURL { get; set; }
    [JsonProperty("naceCodeList")
    public List<string> NaceCodeList { get; set; }
    [JsonProperty("tags")]
    public List<string> Tags { get; set; }
    [JsonIgnore]
    public string JoinedTags => string.Join(",", Tags);
    [JsonProperty("respondents")]
    public List<Respondent> Respondents { get; set; }
    [JsonProperty("childUnits")]
    public List<Unit> ChildUnits { get; set; }
    public string Parent { get; set; }
}

我在 BaseRepository 的构造函数中也有以下内容

        Mapper.Initialize(cfg =>
        {
            cfg.CreateMap<Unit, Unit>();
        });

我的问题是,当我在我的存储库中执行Mapper.Map(unitToUpdate, unit);时,它会清空所有List<whatever>属性。

这是默认行为吗?我在这里做错了什么吗?

为了完整起见,这是我的更新单元函数

    public void UpdateUnit(ClaimsPrincipal user, string orgId, Unit unitToUpdate)
    {
        var org = Get(user, orgId);
        var unit = org.GetUnit(unitToUpdate.Id);
        Mapper.Map(unitToUpdate, unit);
        Update(user, org);
    }

存储的对象是另一种类型,其中包含表示公司的Unit对象的层次结构。org对象是存储在数据库中的内容,表示org对象的类具有自己的函数,用于在自身内部加载Unit对象。

我想你的问题是你首先需要定义来自两个对象的所有集合的映射,然后你需要定义对象的映射。

想法是从底部到顶部(从嵌套的到单元)。

例如(仅考虑受访者:

Mapper.CreateMap<RespondentDb, RespondentDto>();
Mapper.CreateMap<UnitDb, UnitDto>()
    .ForMember(dest => dest.Respondents, opt => opt.MapFrom(src => src.Respondents);

一些参考资料:

  1. https://github.com/AutoMapper/AutoMapper/wiki/Nested-mappings

  2. https://codereview.stackexchange.com/questions/70856/automapper-mapping-a-nested-collection-to-a-list(这里我们有一个只包含一个列表的对象,也许很高兴知道这一点,因为您可以遇到相同的情况)

最新更新