只是想知道这是否可行:
假设我有一个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属性而无需循环并手动更新它们?
答案 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
进行映射的方式非常有用。