gpt4 book ai didi

c# - 如何使用 AutoMapper 将父对象映射到子对象?

转载 作者:太空宇宙 更新时间:2023-11-03 12:24:19 25 4
gpt4 key购买 nike

我有以下类(class):

public class Parent {
string id;
Child child;
}

public class Child {
string Name;
}

本质上,我想做一个 Automapper 配置,允许我将 Parent 映射到 Child 中。我该怎么做?

var parent = GetParent();
var child = Mapper.Map<Child>(parent);

有没有一种方法可以做到这一点,而无需使用

.ForMember(d=> d.Name, o=> o.MapFrom(src => src.child.Name));

原因:

1) child 中有多个成员,创建多个 .ForMembers() 看起来很乱。

2) 使用 Mapper.Map() 而不是直接访问对象,因为这是使用映射配置的父通用提供程序类完成的。

最佳答案

在提供的简单案例中,

.ProjectUsing(x => x.Child)

应该完成您在这里尝试做的事情。

示例代码如下 - 我在子项上包含了一个 Id,以验证只有来自 Parent.Child 的字段才会映射到新的子项。

请注意,这不会与 .MapFrom() 结合使用 - 因此,例如,如果您在子项上有一个 ParentId 属性,您需要进行一些额外的手动映射才能将其从父项获取到子项。

关于多个 .ForMember() 看起来很乱 - 同意如果您正在进行大量映射,它可能会堆积起来,但根据我的经验,它可能有助于防止重命名重构破坏您的映射。强烈建议使用 configuration validation单元测试以确保此类重构不会破坏您的映射。希望对您有所帮助!

    class Program
{
static void Main(string[] args)
{
Mapper.Initialize(MapperConfiguration);

var parent = new Parent()
{
Id = "a",
Child = new Child()
{
Name = "ChildA",
Id = 1
}
};

var child = Mapper.Map<Child>(parent);

Console.Read();
}

private static void MapperConfiguration(IMapperConfigurationExpression mapper)
{
mapper.CreateMap<Parent, Child>()
.ProjectUsing(x => x.Child);
}

public class Parent
{
public string Id { get; set; }
public Child Child { get; set; }
}

public class Child
{
public string Name { get; set; }
public int Id { get; set; }
}
}

关于c# - 如何使用 AutoMapper 将父对象映射到子对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45851323/

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