如何使用AutoMapper根据键值分配参考?

时间:2011-05-10 20:11:03

标签: automapper

我的用例很简单。我有一个引用子对象的根域对象。我有一个DTO从表示域对象的服务调用传回,但不是每次都传递子对象,DTO包含一个保存子对象的键值的属性。像这样:

public class DomainObject
{
    public ChildObject Child { get; set; }
    public String Name { get; set; }
}

public class ChildObject
{
    public Int32 Key { get; set; }
    public String Name { get; set; }
}

public class DTO
{
    public Int32 ChildKey { get; set; }
    public String Name { get; set; }    
}

我有一个缓存的ChildObjects列表。当我从DTO => DomainObject映射时,我想使用DTO.ChildKey属性从缓存中将DomainObject.Child属性设置为现有的ChildObject实例。这是否需要自定义值解析器,还是有其他方法可以实现此目的?

1 个答案:

答案 0 :(得分:1)

是的,您需要一个自定义值解析器。这样的事情会做到:

public class KeyToChildObjectResolver : ValueResolver<Int32, ChildObject>
{
    protected override ChildObject ResolveCore(Int32 source)
    {
         return Cache.Get<ChildObject>(source);
    }
}

然后:

Mapper.CreateMap<DTO, DomainObject>()
      .ForMember(x => x.Child, o => o.ResolveUsing<KeyToChildObjectResolver>()
                                     .FromMember(x => x.ChildKey));

你可以使用直接从DTO转到ChildObject的解析器,然后你的解析器基本上是单一目的。这样,您可以在将子键映射到ChildObject

的任何位置使用它