0

我有嵌套集合和相应模型的实体。比方说:

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 以达到这种行为?
我发现 custom ValueResolversResolveCore方法没有目标类参数,所以它只能创建不能更新集合。

4

1 回答 1

0

这是模型->实体映射的解决方案。

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[]));
    }
}
于 2012-12-21T23:28:27.140 回答