我有嵌套集合和模型的实体。让我们说:
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
方法没有目标类参数,因此它只能创建而不能更新集合。
答案 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[]));
}
}