C# 自动映射忽略嵌套对象的“忽略”属性
我有一个Order对象,它有一个OrderLine对象列表,还有一个OrderVm对象,它有一个OrderLineVm对象列表。OrderLine对象具有OrderLineVm对象中不存在的ValueB字段 我遇到的问题是,即使我告诉AutoMapper忽略此属性,ValueB也会被设置为null:C# 自动映射忽略嵌套对象的“忽略”属性,c#,automapper,C#,Automapper,我有一个Order对象,它有一个OrderLine对象列表,还有一个OrderVm对象,它有一个OrderLineVm对象列表。OrderLine对象具有OrderLineVm对象中不存在的ValueB字段 我遇到的问题是,即使我告诉AutoMapper忽略此属性,ValueB也会被设置为null: [TestFixture] public class AutomapperDestinationIssueTest2 { [Test] public void OrderLineVa
[TestFixture]
public class AutomapperDestinationIssueTest2
{
[Test]
public void OrderLineValueBShouldNotBeNull()
{
Mapper.CreateMap<OrderVm, Order>().ForMember(dest => dest.Lines, opt => opt.UseDestinationValue());
Mapper.CreateMap<OrderLineVm, OrderLine>()
.ForMember(dest => dest.ValueB, opts => opts.Ignore());
var orderVm = new OrderVm() { Id = 1 };
orderVm.Lines.Add(new OrderLineVm() { ValueA = "New ValueA"} );
var order = new Order() { Id = 1 };
order.Lines.Add(new OrderLine() { ValueA = "Old ValueA", ValueB = "Old ValueB " });
Mapper.Map(orderVm, order);
Assert.IsNotNull(order.Lines[0].ValueB); // Fails. ValueB is null here.
}
public class OrderLine
{
public string ValueA { get; set; }
public string ValueB { get; set; }
}
public class OrderLineVm
{
public string ValueA { get; set; }
}
public class Order
{
public int Id { get; set; }
public List<OrderLine> Lines { get; set; }
public Order()
{
Lines = new List<OrderLine>();
}
}
public class OrderVm
{
public int Id { get; set; }
public List<OrderLineVm> Lines { get; set; }
public OrderVm()
{
Lines = new List<OrderLineVm>();
}
}
}
[TestFixture]
公共类自动映射目标问题测试2
{
[测试]
public void orderlinevalues不应为空()
{
Mapper.CreateMap().FormMember(dest=>dest.Lines,opt=>opt.UseDestinationValue());
Mapper.CreateMap()
.ForMember(dest=>dest.ValueB,opts=>opts.Ignore());
var orderVm=new orderVm(){Id=1};
Add(new OrderLineVm(){ValueA=“new ValueA”});
var order=new order(){Id=1};
Add(neworderline(){ValueA=“Old ValueA”,ValueB=“Old ValueB”});
Map(orderVm,order);
Assert.IsNotNull(order.Lines[0].ValueB);//失败。这里的ValueB为null。
}
公共类命令行
{
公共字符串值a{get;set;}
公共字符串值b{get;set;}
}
公共类OrderLineVm
{
公共字符串值a{get;set;}
}
公共阶级秩序
{
公共int Id{get;set;}
公共列表行{get;set;}
公共秩序()
{
行=新列表();
}
}
公共类OrderVm
{
公共int Id{get;set;}
公共列表行{get;set;}
公共秩序虚拟机()
{
行=新列表();
}
}
}
我缺少什么?在地图创建中添加一个额外的映射,从一个列表映射到另一个列表,然后开始工作
Mapper.CreateMap<OrderVm, Order> ().ForMember(dest => dest.Lines, opt => opt.UseDestinationValue());
Mapper.CreateMap<List<OrderLineVm>,List<OrderLine>> ();
Mapper.CreateMap<OrderLineVm, OrderLine> ().ForMember (d => d.ValueB, opt => opt.Ignore());
Mapper.CreateMap().ForMember(dest=>dest.Lines,opt=>opt.usedstinationvalue());
Mapper.CreateMap();
Mapper.CreateMap().formMember(d=>d.ValueB,opt=>opt.Ignore());
不一定要忽略,但这个问题可能只是一个提示——默认情况下,对于集合,AutoMapper会事先清除它们。使用此方法时,AutoMapper不会。