自动地图的属性来分财产的财产(AutoMap a property to property of s

2019-09-30 00:39发布

我有这个简单的数据模型:

// Model
public class Address
{
    public string Street { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string ZipCode { get; set; }
    .... Another values here ....
}

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public Address Address { get; set; }
    .... Another values here ....
}

// ViewModel
public class PersonViewModel
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Street { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string ZipCode { get; set; }
}

我想的值映射(使用AutoMapper) PersonViewModel到相应的属性(其中AutoMapper发现,如果该属性应该在根对象或者子对象的内部)。 记住,AutoMapper不应创建既不Person对象,也没有地址 (对象必须手动创建,以填补自动映射之前另一属性),并AutoMapper使用已经存在的对象。 例如:

var addressObj = new Address
{

    ... Filling some values...

};
var personObj = new Person
{

    Address = addressObj;
    ... Filling some values...

};

mapper.Map(personViewModelObj, personObj); // How to make this work for both Person and Address properties?

我怎样才能像自动映射到两个人物的属性和地址属性的作用?

我要补充的两个映射规则(地址和人),并执行mapper.Map()两次?

Answer 1:

使用@Jasen意见,我得到它的工作。 主要的问题是,我在一个反方向我映射。 这句话的官方文档中解决了这个问题:

Unflattening只配置ReverseMap 。 如果你想unflattening,你必须配置Entity - > Dto然后调用ReverseMap从创建unflattening类型映射配置Dto - > Entity

链接在这里:

https://github.com/AutoMapper/AutoMapper/blob/master/docs/Reverse-Mapping-and-Unflattening.md

换句话说,要想让不讨好的工作,我有(或必须)在这个方向图:

CreateMap<HierarchicalObject, FlattenedObject>()
    .ReverseMap();


文章来源: AutoMap a property to property of sub-property