Automapper 将 2 个实体映射到单个 class

Automapper mapping 2 entities to a single class

只是想知道这是否可能:

假设我有一个用于比较新旧实体的 ViewModel。

public class FooComparison
{
public string Name {get;set;}
public string OldName {get; set;}
public int Age {get; set;}
public int OldAge {get; set;}
...
}

我想从数据库加载 Foo 的 2 个实例,并使用两个实例的详细信息填充 FooComparison。

现在,我 Mapper.CreateMap<Foo, FooComparison>() 将从第一个实体填充姓名、年龄等 - 是否有一种简单的方法可以从第二个实体填充 Oldxxx 属性,而无需循环和手动更新它们?

我的建议是定义一个从 Tuple<Foo, Foo>FooComparison 的映射:

Mapper.CreateMap<Tuple<Foo, Foo>, FooComparison>()
    .ConvertUsing(x => new FooComparison
    {
        Name = x.Item2.Name,
        OldName = x.Item1.Name,
        Age = x.Item2.Age,
        OldAge = x.Item1.Age,
        ...
    });

然后像这样使用它:

Foo oldFoo = ...;
Foo newFoo = ...;
FooComparison comparison = Mapper.Map<FooComparison>(Tuple.Create(oldFoo, newFoo));

我很欣赏这失去了 automapper 的 "auto" 部分,但使用 automapper 获得的最大好处是这个映射只在软件的一个地方定义,而不是 auto部分。

我个人发现这种通过 Tuple 映射的方式非常有效。