1

如下,我使用自动映射器来转换任务

Mapper.CreateMap<Task, GanttTask>().ForMember(dst => dst.parentIdRaw, opt => opt.ResolveUsing<TaskParentIdResolver>())

所以在TaskParentIdResolver中,

public class TaskParentIdResolver : ValueResolver<Task, int?>
{
   protected IUow Uow { get; set; }
   public TaskParentIdResolver()
    {
        RepositoryFactories factory = new RepositoryFactories();
        IRepositoryProvider provider = new RepositoryProvider(factory);
        this.Uow = new Uow(provider);
    }
   protected override int? ResolveCore(Task source)
    {
        if (source.ParentId != null && source.ParentId != Guid.Empty)
        {
            var task = Uow.Tasks.GetById(source.ParentId.Value);
            return task.Id;
        }
        else return null;
    }
}

我面临的问题是,

var tasksList = Mapper.Map<IEnumerable<Task>, IEnumerable<GanttTask>>(Uow.Tasks.GetAll().Where(con => con.IsProjectSummary == true)).ToList();

如果我有 200 个任务,则解析器调用 200 次,每次 Uow 都需要时间返回来解析 parentId。有没有办法在解析器中缓存此任务列表,以便只有第一次 UOw 调用该任务,而所有其他时间它返回任务的缓存列表。

4

1 回答 1

2

不要把缓存放在 AutoMapper 中,把它放在 AutoMapper 使用的任何服务中。如果您使用的是 ORM,请使用 ORM 中可用的缓存。

于 2015-07-31T16:18:14.700 回答