2015-07-31 5 views
0

Как следует, я использую авто картограф для преобразования задачКэширования в Automapper резольвере для повышения производительности

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. Есть ли способ кэшировать этот список задач в resolver, чтобы только первый UOw вызывал задачу, а все остальные - возвращал список задач кеша.

ответ

2

Не ставьте кеширование в AutoMapper, поместите его в любую службу, которую использует AutoMapper. Если вы используете ORM, используйте кеширование, доступное в ORM.

 Смежные вопросы

  • Нет связанных вопросов^_^