public TemplateEditViewModel Execute(Guid?templateId) { TemplateEditViewModel templateModel; if (!templateId.HasValue) { templateModel = new TemplateEditViewModel(); } else { Root.Models.Layout templateAlias = null; TemplateEditViewModel templateViewModelAlias = null; var templateFuture = UnitOfWork.Session.QueryOver(() => templateAlias) .Where(() => templateAlias.Id == templateId && !templateAlias.IsDeleted) .SelectList(select => select .Select(() => templateAlias.Id).WithAlias(() => templateViewModelAlias.Id) .Select(() => templateAlias.Version).WithAlias(() => templateViewModelAlias.Version) .Select(() => templateAlias.Name).WithAlias(() => templateViewModelAlias.Name) .Select(() => templateAlias.PreviewUrl).WithAlias(() => templateViewModelAlias.PreviewImageUrl) .Select(() => templateAlias.LayoutPath).WithAlias(() => templateViewModelAlias.Url)) .TransformUsing(Transformers.AliasToBean <TemplateEditViewModel>()) .FutureValue <TemplateEditViewModel>(); TemplateRegionItemViewModel templateRegionAlias = null; LayoutRegion layoutRegionAlias = null; Region regionAlias = null; var regions = UnitOfWork.Session .QueryOver(() => layoutRegionAlias) .Inner.JoinAlias(c => c.Region, () => regionAlias) .Where(() => layoutRegionAlias.Layout.Id == templateId && !regionAlias.IsDeleted && !layoutRegionAlias.IsDeleted) .SelectList(select => select .Select(() => regionAlias.Id).WithAlias(() => templateRegionAlias.Id) .Select(() => layoutRegionAlias.Description).WithAlias(() => templateRegionAlias.Description) .Select(() => regionAlias.Version).WithAlias(() => templateRegionAlias.Version) .Select(() => regionAlias.RegionIdentifier).WithAlias(() => templateRegionAlias.Identifier)) .TransformUsing(Transformers.AliasToBean <TemplateRegionItemViewModel>()) .Future <TemplateRegionItemViewModel>(); templateModel = templateFuture.Value; if (templateModel == null) { throw new EntityNotFoundException(typeof(TemplateRegionItemViewModel), templateId.Value); } templateModel.Regions = regions.ToList(); templateModel.Options = layoutService.GetLayoutOptions(templateId.Value); } templateModel.CustomOptions = optionService.GetCustomOptions(); return(templateModel); }