如何将嵌套对象映射到现有嵌套对象?

时间:2016-01-19 12:56:45

标签: c# automapper

我有以下课程。

public class Person {
  public string Name { get; set; }
  public Address Address { get; set; }
}

public class PersonDTO {
  public string Name { get; set; }
  public Address Address { get; set; }
}

我使用

创建标准映射
Mapper.CreateMap<Person, PersonDTO>();

然后,我想将Person映射到现有的PersonDTO层次结构中,以便在您知道我的意思时,将更新现有的Address而不是引用。

var person = new Person() {
  Name = "Test",
  Address = new Address() {
    Country = "USA",
    City = "New York"
  }
};
var personDTO = new PersonDTO() {
  Name = "Test2",
  Address = new Address() {
    Country = "Canada",
    City = "Ottawa"
  }
};

Mapper.Map(person, personDTO);

我想完成以下测试。

Assert.AreNotEqual(person.Address, personDTO.Address);
Assert.AreEqual(person.Address.Country, personDTO.Address.Country);
Assert.AreEqual(person.Address.City, personDTO.Address.City);

1 个答案:

答案 0 :(得分:1)

只需在Address之间创建一个地图,就像这样:

Mapper.CreateMap<Address, Address>();

请注意以下测试:

Assert.AreNotEqual(person.Address, personDTO.Address);

如果Address定义Equals方法,可能不会让您想要。根据我对问题的理解,您希望检查参考相等性。

如果您使用的是NUnit,则应使用Assert.AreNotSame

通常,您可以使用object.ReferenceEquals检查参考相等性,如下所示:

bool same_object = object.ReferenceEquals(person.Address, personDTO.Address);
相关问题