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