【问题标题】:How to use AutoMapper to assign reference based on key value?如何使用 AutoMapper 根据键值分配引用?
【发布时间】:2011-05-10 20:11:03
【问题描述】:

我的用例很简单。我有一个引用子对象的根域对象。我有一个从代表域对象的服务调用传回的 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 的现有实例。这需要自定义值解析器还是有其他方法可以实现?

【问题讨论】:

    标签: automapper


    【解决方案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 的子键的地方使用它

    【讨论】:

      猜你喜欢
      • 2018-11-15
      • 2018-09-01
      • 2011-05-21
      • 1970-01-01
      • 2019-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-29
      相关资源
      最近更新 更多