protected virtual bool ResolveTemplate(DbItem item, DataStorage dataStorage) { if (item.TemplateID == TemplateIDs.Template) { return true; } if (item.TemplateID == TemplateIDs.BranchTemplate) { return true; } if (this.ResolveBranch(item, dataStorage)) { return true; } if (dataStorage.GetFakeTemplate(item.TemplateID) != null) { return true; } if (!ID.IsNullOrEmpty(item.TemplateID)) { return false; } var fingerprint = string.Concat(item.Fields.Select(f => f.Name)); // find an item with a generated template that has a matching fields set var sourceItem = dataStorage.GetFakeItems() .Where(si => si.TemplateID != TemplateIDs.Template) .Where(si => dataStorage.GetFakeTemplate(si.TemplateID) != null) .Where(si => dataStorage.GetFakeTemplate(si.TemplateID).Generated) .FirstOrDefault(si => string.Concat(si.Fields.Select(f => f.Name)) == fingerprint); if (sourceItem == null) { return false; } // reuse the template item.TemplateID = sourceItem.TemplateID; return true; }