internal SchemaFilterEntryBag CreateSchemaFilterEntryBag()
        {
            var schemaFilterEntryBag = new SchemaFilterEntryBag();
            foreach (var treeView in _treeViews)
            {
                TreeViewSchemaFilterMapperSettings settings;
                _treeView2Settings.TryGetValue(treeView, out settings);

                foreach (TreeNode parentNode in treeView.Nodes)
                {
                    foreach (TreeNode schemaNode in parentNode.Nodes)
                    {
                        foreach (TreeNode child in schemaNode.Nodes)
                        {
                            UpdateSchemaFilterEntryBagFromLeafNode(child, schemaFilterEntryBag, settings);
                        }
                    }
                }
            }
            return schemaFilterEntryBag;
        }
        private static void UpdateSchemaFilterEntryBagFromLeafNode(
            TreeNode leafNode, SchemaFilterEntryBag schemaFilterEntryBag, TreeViewSchemaFilterMapperSettings settings)
        {
            Debug.Assert(
                settings != null,
                "We should not be passing null settings into this method; they should at least be the default settings");
            if (settings == null)
            {
                return;
            }

            var e = leafNode.Tag as EntityStoreSchemaFilterEntry;
            Debug.Assert(
                e != null,
                "Either the Tag property of the leaf node is null or the leaf node is not an EntityStoreSchemaFilterEntry");
            if (e != null)
            {
                switch (e.Types)
                {
                    case EntityStoreSchemaFilterObjectTypes.Table:
                        if (false == settings.UseOnlyCheckedNodes
                            || leafNode.Checked)
                        {
                            schemaFilterEntryBag.IncludedTableEntries.Add(e);
                        }
                        else
                        {
                            schemaFilterEntryBag.ExcludedTableEntries.Add(
                                new EntityStoreSchemaFilterEntry(
                                    e.Catalog, e.Schema, e.Name, e.Types, EntityStoreSchemaFilterEffect.Exclude));
                        }
                        break;
                    case EntityStoreSchemaFilterObjectTypes.View:
                        if (false == settings.UseOnlyCheckedNodes
                            || leafNode.Checked)
                        {
                            schemaFilterEntryBag.IncludedViewEntries.Add(e);
                        }
                        else
                        {
                            schemaFilterEntryBag.ExcludedViewEntries.Add(
                                new EntityStoreSchemaFilterEntry(
                                    e.Catalog, e.Schema, e.Name, e.Types, EntityStoreSchemaFilterEffect.Exclude));
                        }
                        break;
                    case EntityStoreSchemaFilterObjectTypes.Function:
                        if (false == settings.UseOnlyCheckedNodes
                            || leafNode.Checked)
                        {
                            schemaFilterEntryBag.IncludedSprocEntries.Add(e);
                        }
                        else
                        {
                            schemaFilterEntryBag.ExcludedSprocEntries.Add(
                                new EntityStoreSchemaFilterEntry(
                                    e.Catalog, e.Schema, e.Name, e.Types, EntityStoreSchemaFilterEffect.Exclude));
                        }
                        break;
                    default:
                        Debug.Fail("Unexpected filter object type");
                        break;
                }
            }
        }