使用 AutoMapper,如何将聚合根 属性 映射到所有目标集合项属性?
Using AutoMapper, how do I map an aggregate root property to all destination collection item properties?
我创建了一个MRE which is located and available here
总而言之,我想将源 class 的 属性 映射到目标 属性 的多个列表项的 属性(类型列表)
这是来自 MRE 的例子
来源
using System.Collections.Generic;
namespace WebApplication1.Controllers
{
public class OuterSource
{
public int ID { get; set; }
public List<OuterSourceListItem> List { get; set; }
public string OuterSourceProp1 { get; set; }// Notice how you can have prop on source which is not on dest, no complaints from AutoMapper there
}
public class OuterSourceListItem
{
public string Name { get; set; }
public string Desc { get; set; }
}
}
目的地
using System.Collections.Generic;
namespace WebApplication1.Models
{
public class OuterDest
{
public int ID { get; set; }
public List<OuterDestListItem> List { get; set; }
}
public class OuterDestListItem
{
public string Name { get; set; }
public string Desc { get; set; }
public int MyParentID { get; set; }
}
}
映射器配置
return new MapperConfiguration(cfg =>
{
cfg.AddProfile(new OuterSourceToOuterDest());
cfg.AddProfile(new OuterSourceListItemToOuterDestListItem());
});
简介
public class OuterSourceListItemToOuterDestListItem : Profile
{
public OuterSourceListItemToOuterDestListItem()
{
CreateMap<OuterSourceListItem, OuterDestListItem>();
}
}
public class OuterSourceToOuterDest : Profile
{
public OuterSourceToOuterDest()
{
CreateMap<OuterSource, OuterDest>();
}
}
通过上述设置,这里是使用那些 classes 的客户端,包括实际映射
[HttpGet]
public IActionResult Get()
{
var inputModel = new OuterSource() { ID = 1};
inputModel.List = new List<OuterSourceListItem>();
inputModel.List.Add(new OuterSourceListItem() { Name = "aaa", Desc = "dddd" });
var domain = _mapper.Map<OuterDest>(inputModel);
return Ok(domain);
}
现在的实际输出是下面左边的红色,想要的结果是右边的绿色
我需要 list.myParentID 值等于 OuterSource.ID 的值
你可以在这里看到
这几乎就像我需要以某种方式在 OuterDest 中的 属性 setters/getters 中以某种方式导出 MyParentID?
一个选项是在映射之后立即调用 OuterDest 实例上的方法
AfterMap(ActionafterFunction)
Execute a custom function to the source and/or destination types after
member mapping
我创建了一个MRE which is located and available here
总而言之,我想将源 class 的 属性 映射到目标 属性 的多个列表项的 属性(类型列表)
这是来自 MRE 的例子
来源
using System.Collections.Generic;
namespace WebApplication1.Controllers
{
public class OuterSource
{
public int ID { get; set; }
public List<OuterSourceListItem> List { get; set; }
public string OuterSourceProp1 { get; set; }// Notice how you can have prop on source which is not on dest, no complaints from AutoMapper there
}
public class OuterSourceListItem
{
public string Name { get; set; }
public string Desc { get; set; }
}
}
目的地
using System.Collections.Generic;
namespace WebApplication1.Models
{
public class OuterDest
{
public int ID { get; set; }
public List<OuterDestListItem> List { get; set; }
}
public class OuterDestListItem
{
public string Name { get; set; }
public string Desc { get; set; }
public int MyParentID { get; set; }
}
}
映射器配置
return new MapperConfiguration(cfg =>
{
cfg.AddProfile(new OuterSourceToOuterDest());
cfg.AddProfile(new OuterSourceListItemToOuterDestListItem());
});
简介
public class OuterSourceListItemToOuterDestListItem : Profile
{
public OuterSourceListItemToOuterDestListItem()
{
CreateMap<OuterSourceListItem, OuterDestListItem>();
}
}
public class OuterSourceToOuterDest : Profile
{
public OuterSourceToOuterDest()
{
CreateMap<OuterSource, OuterDest>();
}
}
通过上述设置,这里是使用那些 classes 的客户端,包括实际映射
[HttpGet]
public IActionResult Get()
{
var inputModel = new OuterSource() { ID = 1};
inputModel.List = new List<OuterSourceListItem>();
inputModel.List.Add(new OuterSourceListItem() { Name = "aaa", Desc = "dddd" });
var domain = _mapper.Map<OuterDest>(inputModel);
return Ok(domain);
}
现在的实际输出是下面左边的红色,想要的结果是右边的绿色
我需要 list.myParentID 值等于 OuterSource.ID 的值
你可以在这里看到
这几乎就像我需要以某种方式在 OuterDest 中的 属性 setters/getters 中以某种方式导出 MyParentID?
一个选项是在映射之后立即调用 OuterDest 实例上的方法
AfterMap(Action
Execute a custom function to the source and/or destination types after member mapping