自动映射将2个实体映射到单个类

时间:2015-05-29 18:12:34

标签: automapper

只是想知道这是否可行:

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

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

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

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

1 个答案:

答案 0 :(得分:2)

我的建议是定义从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));

我很欣赏这会失去&#34; auto&#34; automapper的一部分,但是使用automapper真正获得的最大好处是,这个映射只在软件的一个地方定义,而不是汽车部分。

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