C# 自动映射:为嵌套属性设置引用,但不映射

C# 自动映射:为嵌套属性设置引用,但不映射,c#,automapper,C#,Automapper,我想用AutoMapper映射订单类: 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 decim

我想用AutoMapper映射订单类:

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映射。在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
var order=neworder{Id=1,Quantity=5,Product=newproduct{Id=1,Name=“CPU”,Price=500};
var newOrder=Mapper.Map(order);
newOrder.Product=order.Product;//我想将newOrder.Product引用指向与order.Product相同的对象
这种方法不适合我,因为我必须手动设置产品参考,我想用AutoMapper完成。我不希望嵌套产品属性以“经典方式”映射,我只需要在新对象中完全相同的引用


我曾尝试使用ResolveUsing方法和IMemberValueResolver解决此问题,但没有成功,自动映射器仍在映射嵌套的产品属性,而不是像在其他订单对象中一样设置其引用。

首先,您应该通过映射配置忽略初始映射中的
产品
属性,然后传递函数,该函数将设置
新订单
产品
属性,进入
AfterMap
方法

CreateMap<Order, Order>()
    .ForMember(dest => dest.Product, opt => opt.Ignore())
    .AfterMap((src, dest) =>
    {
        dest.Product = src.Product;
    });
CreateMap()
.FormMember(dest=>dest.Product,opt=>opt.Ignore())
.AfterMap((src,dest)=>
{
目的产品=目的产品;
});
映射:

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));
var order=neworder{Id=1,Quantity=5,Product=newproduct{Id=1,Name=“CPU”,Price=500};
var newOrder=Mapper.Map(order);
//输出:对
Console.WriteLine(Object.ReferenceEquals(newOrder.Product,order.Product));

您使用的是哪个
AutoMapper
版本?最新版本:v6.0.2Excellent!有效:)谢谢!我会给你们投票,但我的票数不足15,所以我不能。