Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自动映射忽略嵌套对象的“忽略”属性_C#_Automapper - Fatal编程技术网

C# 自动映射忽略嵌套对象的“忽略”属性

C# 自动映射忽略嵌套对象的“忽略”属性,c#,automapper,C#,Automapper,我有一个Order对象,它有一个OrderLine对象列表,还有一个OrderVm对象,它有一个OrderLineVm对象列表。OrderLine对象具有OrderLineVm对象中不存在的ValueB字段 我遇到的问题是,即使我告诉AutoMapper忽略此属性,ValueB也会被设置为null: [TestFixture] public class AutomapperDestinationIssueTest2 { [Test] public void OrderLineVa

我有一个Order对象,它有一个OrderLine对象列表,还有一个OrderVm对象,它有一个OrderLineVm对象列表。OrderLine对象具有OrderLineVm对象中不存在的ValueB字段

我遇到的问题是,即使我告诉AutoMapper忽略此属性,ValueB也会被设置为null:

[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不会。