public class Foo
{
public string Baz { get; set; }
public List<Bar> Bars { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
当我映射上面的类时,有没有什么方法可以定义我想让automapper映射对象有多深?我所追求的一些伪代码:
var mapped = Mapper.Map<FooDTO>(foo, opt => { levels: 0 });
// result = { Baz: "" }
var mapped = Mapper.Map<FooDTO>(foo, opt => { levels: 1 });
// result = { Baz: "", Bars: [{ Blah: "" }] }
var mapped = Mapper.Map<FooDTO>(foo, opt => { levels: 2 });
// result = { Baz: "", Bars: [{ Blah: "", Buzz: [{ Baz: "" }] }] }
// etc...
Run Code Online (Sandbox Code Playgroud)
由于nuget依赖性,我目前正在使用automapper 3.3.
您可以通过在运行时提供一个值来解决问题:如何根据运行时条件忽略属性?.
组态:
Mapper.CreateMap<Foo, FooDTO>().ForMember(e => e.Bars,
o => o.Condition(c => !c.Options.Items.ContainsKey("IgnoreBars")));
Run Code Online (Sandbox Code Playgroud)
用法:
Mapper.Map<FooDTO>(foo, opts => { opts.Items["IgnoreBars"] = true; });
Run Code Online (Sandbox Code Playgroud)
相同的配置方法可以应用于您调用级别的所有嵌套对象.
如果要为数据库实体实现相同的行为,可以使用ExplicitExpansion本答案中描述的方法:是否可以告诉automapper在运行时忽略映射?.
组态:
Mapper.CreateMap<Foo, FooDTO>()
.ForMember(e => e.Bars, o => o.ExplicitExpansion());
Run Code Online (Sandbox Code Playgroud)
用法:
dbContext.Foos.Project().To<FooDTO>(membersToExpand: d => d.Bars);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1444 次 |
| 最近记录: |