private static string FilterSaveFunction(ComputeForNewBaseItemsInfo info, string uniqueSuffix)
        {
            return string.Format(
            @"        private static readonly Func<IEnumerable<{0}.{1}>, IEnumerable<{0}.{1}>> _filterSaveComputeForNewBaseItems_{2} =
            {3};

            ",
                info.Dependency_Extends.Extension.Module.Name, info.Dependency_Extends.Extension.Name, uniqueSuffix, info.FilterSaveExpression);
        }
        private static string HelperFunctionSnippet(ComputeForNewBaseItemsInfo info, string uniqueSuffix)
        {
            DataStructureInfo hookOnSave = info.Dependency_Extends.Base;

            return string.Format(
            @"        private static readonly Func<IEnumerable<{0}.{1}>, Guid[]> _filterComputeForNewBaseItems_{2} =
            changedItems => changedItems.Select(item => item.ID).ToArray();

            ",
                hookOnSave.Module.Name,
                hookOnSave.Name,
                uniqueSuffix);
        }
        private static string RecomputeForNewItemsSnippet(ComputeForNewBaseItemsInfo info, string uniqueSuffix)
        {
            DataStructureInfo hookOnSave = info.Dependency_Extends.Base;
            EntityInfo updatePersistedComputation = info.EntityComputedFrom.Target;

            return string.Format(
            @"if (inserted.Count() > 0)
            {{
                IEnumerable<{0}.{1}> changedItems = inserted;
                var filter = _filterComputeForNewBaseItems_{2}(changedItems);
                _domRepository.{3}.{4}.{6}(filter{5});
            }}
            ",
                hookOnSave.Module.Name,
                hookOnSave.Name,
                uniqueSuffix,
                updatePersistedComputation.Module.Name,
                updatePersistedComputation.Name,
                !string.IsNullOrWhiteSpace(info.FilterSaveExpression) ? (", _filterSaveComputeForNewBaseItems_" + uniqueSuffix) : "",
                EntityComputedFromCodeGenerator.RecomputeFunctionName(info.EntityComputedFrom));
        }
        private static string RecomputeForNewItemsSnippet(ComputeForNewBaseItemsInfo info, string uniqueSuffix)
        {
            DataStructureInfo hookOnSave = info.Dependency_Extends.Base;
            EntityInfo updatePersistedComputation = info.EntityComputedFrom.Target;

            return string.Format(
            @"            if (inserted.Count() > 0)
            {{
                IEnumerable<{0}.{1}> changedItems = inserted;
                var filter = _filterComputeForNewBaseItems_{2}(changedItems);
                _domRepository.{3}.{4}.{6}(filter{5});

                // Workaround to restore NH proxies after using NHSession.Clear() when saving data in Recompute().
                for (int i=0; i<inserted.Length; i++) inserted[i] = _executionContext.NHibernateSession.Load<{0}.{1}>(inserted[i].ID);
                for (int i=0; i<updated.Length; i++) updated[i] = _executionContext.NHibernateSession.Load<{0}.{1}>(updated[i].ID);
            }}
            ",
                hookOnSave.Module.Name,
                hookOnSave.Name,
                uniqueSuffix,
                updatePersistedComputation.Module.Name,
                updatePersistedComputation.Name,
                !string.IsNullOrWhiteSpace(info.FilterSaveExpression) ? (", _filterSaveComputeForNewBaseItems_" + uniqueSuffix) : "",
                EntityComputedFromCodeGenerator.RecomputeFunctionName(info.EntityComputedFrom));
        }
 private static string GetUniqueSuffixWithinBase(ComputeForNewBaseItemsInfo info)
 {
     var baseModule = info.Dependency_Extends.Base.Module;
     return DslUtility.NameOptionalModule(info.EntityComputedFrom.Source, baseModule)
         + DslUtility.NameOptionalModule(info.EntityComputedFrom.Target, baseModule);
 }