我试图将一个基本上扁平化的视图模型Map到一个具有嵌套对象的Dto。由于视图模型属性的名称与Dto不同,因此很难做到这一点。下面是我们正在使用的示例。
// --- Source ---
public class OrderView
{
public int order_id {get; set;}
public string customer_name {get; set;}
public string customer_last_name {get; set;}
}
public class Order
{
public int Id {get; set;}
}
public class Customer
{
public string Name {get; set;}
public string LastName {get; set;}
}
// --- Dest ---
public class OrderDto
{
public Order Order {get; set;}
public Customer Customer {get; set;}
}
字符串
一般来说,我只会反转Map,这将工作,但我试图找出如何做到这一点,在一个更干净的方式比以下:
var result = new OrderDto
{
Order = _mapper.Map<Order>(orderView),
Customer = _mapper.Map<Customer>(orderView)
}
型
我想知道这样的事情是否可能
var result = _mapper.Map<OrderDto>(orderView);
型
提前感谢你的提示。
1条答案
按热度按时间odopli941#
从理论上讲,是的。你必须在
int
和OrderDto
之间建立一个Map:字符串
但是你可以问自己一个问题,这是否是一个有效的情况下AutoMapper。这种Map仍然可以被认为是'自动'?Map之间的
int
和Order
?作为个人规则,任何使用超过
.Ignore()
的Map配置文件在我看来都是一种代码气味,可能最好使用手动Map来解决。这是因为复杂的Map经常隐藏业务逻辑,并且任何人都不希望业务逻辑出现在AutoMapper配置文件中。例如,如果源类和目标类之间的属性名称不匹配,在这两者之间有隐藏的业务逻辑需要转换。您最好使用手动Map:型
这将业务逻辑放在正确的位置(在完整视图中!),比我上面给出的复杂AutoMapperMap更具可读性,并且具有相同数量的代码行。