我有以下类
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);
一些参考资料:
https://github.com/AutoMapper/AutoMapper/wiki/Nested-mappings
https://codereview.stackexchange.com/questions/70856/automapper-mapping-a-nested-collection-to-a-list(这里我们有一个只包含一个列表的对象,也许很高兴知道这一点,因为您可以遇到相同的情况)