private ActivityTemplateDO Clone(ActivityTemplateDO source) { var newTemplate = new ActivityTemplateDO(); CopyPropertiesHelper.CopyProperties(source, newTemplate, false); newTemplate.Terminal = _terminal.GetByKey(source.TerminalId); if (source.Categories != null) { newTemplate.Categories = new List <ActivityCategorySetDO>(); foreach (var acs in source.Categories) { var newActivityCategory = new ActivityCategoryDO(); var activityCategory = _activityCategory.GetById(acs.ActivityCategoryId); CopyPropertiesHelper.CopyProperties(activityCategory, newActivityCategory, false); newTemplate.Categories.Add(new ActivityCategorySetDO() { ActivityTemplateId = newTemplate.Id, ActivityTemplate = newTemplate, ActivityCategoryId = newActivityCategory.Id, ActivityCategory = newActivityCategory }); } } return(newTemplate); }