次のように、自動マッパーを使用してタスクを変換しています
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 が親 ID を解決するために戻るのに時間がかかります。このタスク リストをリゾルバーにキャッシュして、最初の UOw のみがタスクを呼び出し、それ以外の場合はすべてタスクのキャッシュ リストを返すようにする方法はありますか。