我想用 AutoMapper 映射 Order 类:
class Order
{
public int Id { get; set; }
public int Quantity { get; set; }
public Product Product { get; set; }
}
产品类:
class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
}
我已经为 Order 和 Product 类创建了 AutoMapper map 。在 Product 类中,我跳过了 Id 值。
问题是我想映射 Order.Product 作为引用。我可以通过这种方式实现它:
var order = new Order { Id = 1, Quantity = 5, Product = new Product { Id = 1, Name = "CPU", Price = 500 } };
var newOrder = Mapper.Map<Order, Order>(order);
newOrder.Product = order.Product; // I want to newOrder.Product reference point to the same object as order.Product
这种方法对我来说不合适,因为我必须手动设置 .Product 引用,我希望使用 AutoMapper 来完成。我不希望以“经典方式”映射嵌套的 Product 属性,我只需要在新对象中使用完全相同的引用。
我曾尝试使用 ResolveUsing 方法和 IMemberValueResolver 来解决这个问题,但没有成功,AutoMapper 仍然映射嵌套的 Product 属性,而不是将其引用设置为与其他 Order 对象中的引用相同。
最佳答案
首先你应该通过映射配置从初始映射中忽略 Product
属性,然后传递函数,这将设置 newOrder
的 Product
属性,进入 AfterMap
方法。
CreateMap<Order, Order>()
.ForMember(dest => dest.Product, opt => opt.Ignore())
.AfterMap((src, dest) =>
{
dest.Product = src.Product;
});
映射:
var order = new Order { Id = 1, Quantity = 5, Product = new Product { Id = 1, Name = "CPU", Price = 500 } };
var newOrder = Mapper.Map<Order, Order>(order);
//Ouputs: true
Console.WriteLine(Object.ReferenceEquals(newOrder.Product, order.Product));
关于c# - AutoMapper:为没有映射的嵌套属性设置引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43029257/