AutoMapper定义映射级别

时间:2017-06-04 10:28:52

标签: c# automapper

def relu(x, deriv=False):#RELU
    if (deriv == True):
        mask = x > 0
        x[mask] = 1
        x[~mask] = 0
    else: # HERE YOU WERE MISSING "ELSE"
        return np.maximum(0,x)

当我映射上面的类时,有没有办法来定义我想让automapper映射对象有多深?我所追求的一些伪代码:

public class Foo
{
    public string Baz { get; set; }
    public List<Bar> Bars { get; set; }
}

我目前正在使用automapper 3.3,因为它具有nuget依赖性。

2 个答案:

答案 0 :(得分:7)

您可以通过在运行时提供值来回答问题:How to ignore a property based on a runtime condition?

<强>配置:

Mapper.CreateMap<Foo, FooDTO>().ForMember(e => e.Bars,
    o => o.Condition(c => !c.Options.Items.ContainsKey("IgnoreBars")));

<强>用法:

Mapper.Map<FooDTO>(foo, opts => { opts.Items["IgnoreBars"] = true; });

相同的配置方法可以应用于您调用级别的所有嵌套对象。

如果您希望为数据库实体实现相同的行为,可以使用ExplicitExpansion方法,如此答案中所述:Is it possible to tell automapper to ignore mapping at runtime?

<强>配置:

Mapper.CreateMap<Foo, FooDTO>()
    .ForMember(e => e.Bars, o => o.ExplicitExpansion());

<强>用法:

dbContext.Foos.Project().To<FooDTO>(membersToExpand: d => d.Bars);

答案 1 :(得分:1)

您可以定义特定地图MaxDepth,如:

Mapper.CreateMap<Source, Destination>().MaxDepth(1);

更多信息: https://github.com/AutoMapper/AutoMapper/wiki

相关问题