Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.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# 如何使用automapper将源类型的父级映射到目标类型的集合?_C#_Automapper - Fatal编程技术网

C# 如何使用automapper将源类型的父级映射到目标类型的集合?

C# 如何使用automapper将源类型的父级映射到目标类型的集合?,c#,automapper,C#,Automapper,我有以下课程: public class Source { public string ID { get; set; } public int Age Name { get; set; } public virtual ICollection<SourceChild> SourceChildren { get; set; } } public class SourceChild { public string Name { get; set; }

我有以下课程:

public class Source 
{
    public string ID { get; set; }
    public int Age Name { get; set; }
    public virtual ICollection<SourceChild> SourceChildren { get; set; }
}

public class SourceChild 
{
    public string Name { get; set; }
    public string Language { get; set; }
    public string SourceId { get; set; }
    public virtual Source Source { get; set; }
}

public class Destination
{
    public int Age { get; set; }
    public string Name { get; set; }
    public string Language { get; set; }
    public string Id { get; set; }
}
为了更好地说明这种情况,这里对类进行了简短的描述:我有
Source
对象和
SourceChild
子对象
SourceChild
对象包含不同语言的信息。当我将源映射到目标时,我想输入源对象并接收目标对象集合的输出。对于每个
SourceChild
对象,
Source
对象都应该有一个
Destination
对象。
SourceUser
仅指具有1-many关系的
Source
DestinationUser
Destination
类有多个retion。换句话说,每个
DestinationUser
都有一个所有语言的所有
目的地的列表。考虑到这些,让我们回到代码上来

我在编写我需要的代码方面运气不错。我想到了这个:

 Mapper.CreateMap<SourceUser, DestinationUser>()
                .AfterMap((source, destination) => Mapper.Map<Source, List<Destination>>(source.Source));

    Mapper.CreateMap<Source, List<Destination>>()
                    .AfterMap((source, destination) => Mapper.Map<List<SourceChild>, List<Destination>>(source.SourceChildren.ToList(), destination));
一切都很好。DestinationUsers的列表是从源实例映射的


是否可以避免手动调用后者
Mapper.Map()
call?还要记住,列表目的地可能会更改为任何其他集合。我只想为每个
SourceChild
object
Source
had拥有一个目标对象

事实证明,我离我想要的解决方案只有一小步之遥。我所需要的只是扩展
SourceUser
DestinationUser
类的映射,使其如下所示:

Mapper.CreateMap<SourceUser, DestinationUser>()
                .AfterMap((source, destination) => Mapper.Map<Source, List<Destination>>(source.Source, destination.Destinations));
Mapper.CreateMap()
.AfterMap((source,destination)=>Mapper.Map(source.source,destination.Destinations));

希望这能帮助那些遇到与我所面临的问题类似的问题的人:)

事实证明,我离我所追求的解决方案只有一小步之遥。我所需要的只是扩展
SourceUser
DestinationUser
类的映射,使其如下所示:

Mapper.CreateMap<SourceUser, DestinationUser>()
                .AfterMap((source, destination) => Mapper.Map<Source, List<Destination>>(source.Source, destination.Destinations));
Mapper.CreateMap()
.AfterMap((source,destination)=>Mapper.Map(source.source,destination.Destinations));
希望这有助于遇到与我所面临的问题类似的问题的人:)

SourceUser SourceUser = Db.GetSourceUser();
DestinationUser DestUser = Db.GetDestinationUser();
DestUser.Destinations = Mapper.Map<List<Destination>>(SourceUser.Source);
Mapper.CreateMap<SourceUser, DestinationUser>()
                .AfterMap((source, destination) => Mapper.Map<Source, List<Destination>>(source.Source, destination.Destinations));