首页 > 解决方案 > AutoMapper 不更新嵌套集合

问题描述

我正在尝试简化映射类的过程。为此,我正在使用 AutoMapper。如果没有一个类没有嵌套集合,那么一切都很好。但是,如果有人有,我在映射时遇到了麻烦。收集到一个类是覆盖。我找到了一个扩展AutoMapper.Collection。但这对我不起作用。

我正在开发一个 web api 项目,所以这里有一些代码:

// Classes for mapping
public class A_Dto
{
    public int Id { get; set; }
    public List<A_SubItem_Dto> SubItems { get; set; }

}

public class A_SubItem_Dto
{
    public int Id { get; set; }
    public string Value { get; set; }
    public A_Dto A_MainObject { get; set; }
}

public class A_Resource
{
    public int Id { get; set; }
    public List<A_SubItem_Resource> SubItems { get; set; }

}

public class A_SubItem_Resource
{
    public int Id { get; set; }
    public string Value { get; set; }
}

// Configure AutoMapper
public void ConfigureServices(IServiceCollection services)
{
    services.AddAutoMapper(cfg => cfg.AddCollectionMappers(), typeof(Startup));
}

// Configure profile class for mapping
public class AutoMapping : Profile
{
    CreateMap<A_Dto, A_Resource>().ReverseMap()
         .ForMember(m => m.Id, opt => opt.Ignore());
    CreateMap<A_SubItem_Dto, A_SubItem_Resource>().ReverseMap()
        .EqualityComparison((sir, si) => sir.Id == si.Id);
}

// Controller action with simple test
public async Task<IActionResult> Put(/*...*/)
{
    // Test
    var aDto = new A_Dto()
    {
        Id = 7,
        SubItems = new List<A_SubItem_Dto>() 
        { 
            new A_SubItem_Dto() { Id = 2, Value = "_2_" }, 
            new A_SubItem_Dto() { Id = 9, Value = "_9_" } 
        }
    };

    var aResource = new A_Resource()
    {
        Id = 7,
        SubItems = new List<A_SubItem_Resource>() 
        { 
            new A_SubItem_Resource() { Id = 2, Value = "_222222_" }
        }
    };

    _mapper.Map(aResource, aDto);
}

结果aDto对象包含新集合,其中一个元素为aResource.SubItems

你能告诉我,我做错了什么吗?

标签: c#.net-coreautomapperwebapi

解决方案


推荐阅读