如何将嵌套对象映射到现有的嵌套对象?
How to map nested object into an existing nested object?
我有以下 类.
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);
只需在 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);
我有以下 类.
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);
只需在 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);