修改目标对象

时间:2012-12-21 21:12:54

标签: c# automapper

我有嵌套集合和模型的实体。让我们说:

class Entity
{
    public IList<NestedEntity> Nested { get; set; }
}

class Model
{
    public IList<NestedModel> Nested { get; set; }
}

我需要以下内容:

var existingEntity = service.GetEntity(id);
Mapper.Map<Model, Entity>(model, existingEntity);
// now existingEntity is an updated entity and we can save it
service.SaveEntity(existingEntity);

因此,映射嵌套集合映射器时应删除现有实体中不存在的项目,添加新创建的项目并更新其他项目。
如何配置AutoMapper以达到此类行为?
我发现自定义ValueResolver ResolveCore方法没有目标类参数,因此它只能创建而不能更新集合。

1 个答案:

答案 0 :(得分:0)

以下是模型的解决方案 - &gt;实体映射。

Mapper.CreateMap<NestedModel, NestedEntity>();
Mapper.CreateMap<Model, Entity>()
      .ForMember(x => x.Nested, opt => opt.ResolveUsing<Resolver>());

public class Resolver : IValueResolver
{
    public ResolutionResult Resolve(ResolutionResult source)
    {
        var targetCollection = ((Entity) source.Context.DestinationValue).Nested;

        // TODO: Custom mapping here.

        return source.New(targetCollection, typeof(NestedEntity[]));
    }
}