gpt4 book ai didi

c# - AutoMapper 定义映射级别

转载 作者:可可西里 更新时间:2023-11-01 08:10:52 24 4
gpt4 key购买 nike

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

当我映射上面的类时,有什么方法可以定义我希望自动映射器映射对象的深度吗?我所追求的一些伪代码:

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...

由于 nuget 依赖性,我目前正在使用 automapper 3.3。

最佳答案

您可以通过在运行时提供一个值来做到这一点,正如问题中所回答的: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);

关于c# - AutoMapper 定义映射级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44353062/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com